Perlに関する初歩的な質問です。以下のソースですが、


#!C:\perl\bin\perl

print "Content-type: text/html\n\n";

use lib 'HTML/TagParser.pm';

print "TEST";

my $html = HTML::TagParser->new( "http://www.google.co.jp/" );
my $elem = $html->getElementsByTagName( "title" );
print "<title>", $elem->innerText(), "</title>\n" if ref $elem;

exit;

__END__

おそらく、無茶苦茶初歩的な事でつまづいていると思いますが、どうやっても
動きません。予想では、グーグルのタイトルがでてくると思うのですが、
どなたか力をお貸しください。

よろしくお願いします。

回答の条件
  • URL必須
  • 1人20回まで
  • 登録:2007/02/15 15:51:29
  • 終了:2007/02/15 17:02:09

回答(3件)

id:ootatmt No.1

ootatmt回答回数1307ベストアンサー獲得回数652007/02/15 16:06:00

ポイント50pt

まず HTML::TagParser はインストールされていますか?

これは間違いなくインストールされているとして、次の部分を修正してください。


use lib 'HTML/TagParser.pm';

  ↓

use HTML::TagParser;


http://search.cpan.org/~kawasaki/HTML-TagParser-0.14/lib/HTML/Ta...

id:zachouR

すいません、インストール以外で利用したいのでこのような形になっていますが、これが間違いでしょうか?

2007/02/15 16:12:48
id:ootatmt No.2

ootatmt回答回数1307ベストアンサー獲得回数652007/02/15 16:22:06

ポイント50pt

TagParser.pm の入っている HTMLディレクトリはそのプログラムと同じ場所にあるのですね?

それでしたら、use lib は必要ありません。

もし別の場所に HTMLディレクトリ を置いているのであれば、その場所を lib で指定してください。

たとえば C:\lib\HTML\TagParser.pm であれば

use lib "C:\lib";

そして、そのあとに次の行が必要です。

use HTML::TagParser;

http://q.hatena.ne.jp/1171522287

id:zachouR

はい、HTMLディレクトリは同じ場所にいます。なんどもすいません、、、

use HTML::TagParser;

print "TEST";

my $html = HTML::TagParser->new( "http://www.google.co.jp/" );

my $elem = $html->getElementsByTagName( "title" );

print "<title>", $elem->innerText(), "</title>\n" if ref $elem;

exit;

これで試すと、TESTだけ表示されて後はまっしろです(;;)

2007/02/15 16:36:29
id:noboru No.3

noboru回答回数94ベストアンサー獲得回数02007/02/15 16:35:57

ポイント20pt

それ、text/html の出力にしなければならないのに出力内容が HTML になってませんよ。最初の TEST の出力は HTML 的には間違いです。更に title タグの中に文字列を入れてますが、それだとタイトルの指定しかしていません。

ということでまずはまともな HTML ファイルを作ってそれを出すだけ(あるいはそれの一部だけを変更して出すだけ)のプログラムにしてみたらどうですか?

http://www.tohoho-web.com/wwwbeg1.htm#Html

id:zachouR

こういう事でしょうか?

print "Content-type: text/html\n\n";

print <<"EOM";

<html lang="ja">

<head>

<meta http-equiv="content-type" content="text/html;charset=shift_jis">

<title></title>

</head>

<body>

EOM

use HTML::TagParser;

print "TEST";

my $html = HTML::TagParser->new( "http://www.google.co.jp/" );

my $elem = $html->getElementsByTagName( "title" );

print "抽出したタイトルは", $elem->innerText(), "です\n" if ref $elem;

print <<"EOM";

</body>

</html>

EOM

exit;

2007/02/15 16:45:34
  • id:zachouR
    大変ありがとうございました。
    モジュールの種類を変更して以下でやってみるとうまくいきました。

    #!C:\perl\bin\perl

    # モジュール系
    use HTTP::Lite;

    print "Content-type: text/html\n\n";

    $http = new HTTP::Lite;
    $req = $http->request("http://www.google.co.jp/")
    or die "Unable to get document: $!";
    print $http->body();

    exit;

    __END__

    きちんと出力されました。よかったです。

    ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません