use LWP::Simple;

($content_type, $document_length, $modified_time, $expires, $server)
= head $url;

とすると,$modified_timeに$urlのアドレスのWebページの更新日時が
得られるとあったのですが,何も値が取得できないのはなぜでしょうか.
$expiresにだけ NCSA/1.3という値が入っていました.

このQ&Aに関連する最新のQ&A

A 回答 (4件)

LWP::UserAgent使ってましたがtimeoutがうまくいってくれないので


使うのをやめてしまいました。^^;

で、日付が取得できないのはどのサーバーでもでしょうか?
サーバーによっては日付取得させてくれないのもあるみたいです。

仕組みがわかってしまえばsocketも簡単ですから、LWP::Simpleに
頼らず自力で書いてしまっては?参考URLを見れば必要なコマンドも
わかりますし。

http://rie.h.kobe-u.ac.jp/~ohkubo/script.shtml
のsky_lib.plなんかも参考になります。

参考URL:http://www.glasscom.com/tone/articles/nos1998b/w …

この回答への補足

参考URLをありがとうございます.大変参考になりました.

LWPでは日付が取得できるサーバとできないサーバがあるようです.

素人な者ですこしお伺いしたいのですが,
自力で書くというのは
HTTP::Requestなどでヘッダ情報を取得するということでしょうか?

LWPで取得できない場合に,「自力」で書くと取得できるようになるのでしょうか?

補足日時:2001/05/01 19:12
    • good
    • 0

>LWPでは日付が取得できるサーバとできないサーバがあるようです.



LWPではというよりも、設定なのかなんなのか、そういうサーバーは
存在します。取得できないページをNetscapeで見て[情報を見る]を
やってみてください。同じように日付が取得できないのではないかと。

WWWDがそうですが、HEADで更新日が取得できないもの、動的出力される
ページなどは、ページのサイズを見て更新されたかどうかを判断
しています。もし更新チェッカを作ろうとしているのならばサイズで
判断してはどうでしょう。

>自力で書くというのは
>HTTP::Requestなどでヘッダ情報を取得するということでしょうか?

違います。use Socket;のみ用いて、あとのやりとりは全て自前で
書くということです。前回参考としてあげたURLにtelnetでアクセス
する方法がありますが、まさにそれをperlでやるのです。
そのほうがあらゆる環境で動くものが作れますし、モジュールに
まかせっきりよりか、何が問題なのかがわかってくるでしょう。

Socketの使い方は同じく前回あげたsky_lib.plが参考になります。
    • good
    • 0
この回答へのお礼

ありがとうございます.
いろいろと勉強になります.

一説によると,サーバのバージョンが古くてLast-modifiedに対応していないのではとのことでした.
どうやら,そのようなサーバのHPはgoogleでは検索されるのに,
更新日時も表示するgooでは検索にひっかからないようです.
gooの人たちが頑張ってもだめということは,
取得は不可能という結論でいいのかな.

お礼日時:2001/05/02 10:11

CGIは正常に稼動してますでしょうか?

この回答への補足

get $url;
でWebページを獲得することはできています.

補足日時:2001/04/27 18:10
    • good
    • 0

Perlはサーバに対応してますか?


もし、無理であるならばJavaで取得するってのはどうでしょうか?

この回答への補足

早速の回答ありがとうございます.
「Perlがサーバに対応」の意味が少しわかりかねるのですが,
もう少し詳しい説明が頂けないでしょうか?
よろしくお願いします.

補足日時:2001/04/27 15:58
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q$wfurikae = 1 if ( &ccom::getShukujitsu( &com::tD( $wwy,$wwm,$wwd )) ne '' );がよく

$wfurikae = 1 if ( &ccom::getShukujitsu( &com::tD( $wwy,$wwm,$wwd )) ne '' );

というスクリプトがあったのですが、

$wfurikae = 1 の後に;もいれずifがきています。

違和感があります。

どのような意味になるのでしょうか。

宜しくお願い致します。

Aベストアンサー

そのまんまだと思いますよ。
if 以下の条件が真の時 $wfurikae = 1となります。
Perlはいろいろな書き方ができますので、こういう書き方もありです。
英語の文法の並びにする書き方です。

Qwhileの$_とforeachの$_の関係

以下のコードにおけるwhileとforeachでの$_の使いかたについて教えてください。

my @foos = qw( a b );

sub foo1 {
  open FH, "foo.txt";

  while (<FH>) {
    chomp;
    print "$_";
  }

#  while (my $x = <FH>) {
#    chomp $x;
#    print "$x";
#  }
  
  print "\n";
}

sub foo2 {
  foreach (@foos) {
    print "<$_>";
    foo1();
  }
  print "\n";
}

foo2();
foo2();

このコードと同じディレクトリに以下のような内容のfoo.txtをおいて実行します。

x
y

すると、以下のような結果が得られました。

<a>xy
<b>xy

<>xy
<>xy

一回目のfoo2で@foosの内容が消えてしまいます。一方、コメントアウトしてあるようにwhileに変数($x)を使うと期待したとおりの結果が出ます。なぜ、このような結果になるのでしょうか。ご存知の方がいらっしゃったら教えてください。宜しくお願いします。ちなみに、WinXP + ActivePerl(v5.8.6)で試しました。

以下のコードにおけるwhileとforeachでの$_の使いかたについて教えてください。

my @foos = qw( a b );

sub foo1 {
  open FH, "foo.txt";

  while (<FH>) {
    chomp;
    print "$_";
  }

#  while (my $x = <FH>) {
#    chomp $x;
#    print "$x";
#  }
  
  print "\n";
}

sub foo2 {
  foreach (@foos) {
    print "<$_>";
    foo1();
  }
  print "\n";
}

foo2();
foo2();

このコードと同じディレクトリに以下のような...続きを読む

Aベストアンサー

簡単に言うと
$_ をfoo1 とfoo2 で使っている為です。
こういうことがあるので
関数の中では使う変数はできるだけ局所的な使い方をするのがよろしいです。
最初の
foreach(@foos){
}
の中で$_ は、配列の中身のコピーではなくて、配列の要素そのものを指しているので、$_ への変更は直接@foosへの変更になってしまうので注意が必要です(この動作はこの動作で便利なものなんですが・)
なので、
foreach my $x (@foos) {
print "<$x>";
foo1();
}
のようにすれば良かったのかもしれません。
また、
sub foo1{
local $_;

}
のようにすれば、
foo1 で(foo2で使っていても)安心して$_ を使うことができます。

Q@color1 = ('0000ae',・・・,'$user_color')で・・

とまとです。

行き詰まりました(TェT)

標題の代入で、'$user_color'の部分を文字列ではなく、後から出て来るinputで入力した文字を代入させるにはどうしたらいいのでしょう?
※標題のままだと「$user_color」という"文字列"が代入されてしまいます。

Aベストアンサー

変数の内容を展開したければ、
' でくくらなければいいわけですが、
後から出てくるなら、その代入時点では
undefine 状態ですか?

QperlのLWP::Simpleでgrepの値がおかしい

下記のperlでgrepの戻り値がおかしい。
use Encode;
use utf8;
use open IO => ":encoding(utf8)";
binmode STDOUT,':encoding(cp932)';
binmode STDERR,':encoding(cp932)';
use LWP::Simple;

$content=get("http://uwakich.com/archives/49502116.html");
@list1=grep /\n/,$content;

@list2=grep{$list1[$_] =~ /html/} 0 .. $#list1;
print @list2;

grepの値は、添字を返す。結果は0を返す。実際は、最低でも2つは有る
はずだが。一つも無いと言うのは、どうしてだろうか。

これは、例えば一旦$contentをファイルに落としてからやると、今度は
きちんとgrepは添字を返して来る。

何が違うのだろうか。済みません。誤りを指摘願います。

下記のperlでgrepの戻り値がおかしい。
use Encode;
use utf8;
use open IO => ":encoding(utf8)";
binmode STDOUT,':encoding(cp932)';
binmode STDERR,':encoding(cp932)';
use LWP::Simple;

$content=get("http://uwakich.com/archives/49502116.html");
@list1=grep /\n/,$content;

@list2=grep{$list1[$_] =~ /html/} 0 .. $#list1;
print @list2;

grepの値は、添字を返す。結果は0を返す。実際は、最低でも2つは有る
はずだが。一つも無いと言うのは、どうしてだろうか。

これは、例え...続きを読む

Aベストアンサー

ちゃんと「添字 0 」という「正しい結果」が返ってきてますよ。

@list1=grep /\n/,$content;
 は、「要素が $content だけのリスト」が引数となります。つまり
my @contents
$contents[0] = $content ;
@list1=grep /\n/, @contents;
 と同等です。

 grepは /\n/ が真となる要素のリストをかえします。したがって
@;ist1 = @contents ;
 すなわち
$;ist1[0] = $content ;
 と同じ状態になります。

 その該当する添字の返えせば
@list2 = ( 0 )
 になるのが正しい動作です。


> 例えば一旦$contentをファイルに落としてからやると

こちらは、
@lines = <FP> ;
みたいな感じで、 ファイルの1行 = リストの1要素 として読み込んでいるのではないですか?

「行分割されたリスト」
と、
「全行を連結した文字列」
とで、結果が違ってもなんの不思議もありません。


@list1=grep /\n/,$content;
はsplitでしょうね。

http://perldoc.jp/func/grep
http://perldoc.jp/func/split

ちゃんと「添字 0 」という「正しい結果」が返ってきてますよ。

@list1=grep /\n/,$content;
 は、「要素が $content だけのリスト」が引数となります。つまり
my @contents
$contents[0] = $content ;
@list1=grep /\n/, @contents;
 と同等です。

 grepは /\n/ が真となる要素のリストをかえします。したがって
@;ist1 = @contents ;
 すなわち
$;ist1[0] = $content ;
 と同じ状態になります。

 その該当する添字の返えせば
@list2 = ( 0 )
 になるのが正しい動作です。


> 例えば一旦$contentをフ...続きを読む

Q「$" = ',';」という構文の意味は?

Perl スクリプト中に「$" = ',';」という構文が出てきたのですが、これはどういう意味ですか?

Aベストアンサー

"(ダブルクオート)内ではリスト値(@foo)も展開されますが、そのリスト値の区切り文字を定義する特殊変数で、デフォルトはスペースだそうです。

参考URL:http://www.tohoho-web.com/wwwperl1.htm#Tokushu


おすすめ情報