1

URLのデータベースでfile::fetchを実行している間、特定のURLにはhttp://google.comなどのトップレベルドメインのみが含まれます。フェッチするファイルがあることを確認するようにifチェックを構築するにはどうすればよいですか?新しいfile :: fetchオブジェクトを作成するときに、このエラーはスローされません:

Use of uninitialized value $path in pattern match (m//) at C:/Perl/lib/File/Spec/Unix.pm line 267.
Use of uninitialized value in string eq at C:/Perl/lib/File/Fetch.pm line 395.

これが私のコードのスニペットで、検証を行おうとしています

my $uri_handle = File::Fetch->new(uri => $url);
my $getfile = $uri_handle ->file;
if ($getfile){
    my $dir_handle = $uri_handle->fetch( to => $dir ) or die "Couldn't fetch file: $uri_handle->error\n";
    #print "[ID:$myid] File fetch completed!\n\n";
}else{
    print "[ID:$myid] There is no file to be fetched from $url\n\n";
}   

ただし、URLでファイル名を取得できなかったため、fileメソッドも失敗します。

Thread 1 terminated abnormally: Can't call method "file" on an undefined value at C:\test\multihashtest2.pl line 102.
4

1 に答える 1

1

あなたのperlスクリプトは、URIを読み込もうとするまで、Webサーバーに何があるのか​​、何がないのかを知りません。URLがどのように見えるかは関係ありません。ファイルをフェッチして、エラーを適切に処理する必要があります。

コードを投稿すると役に立ちますが、ドキュメントを参照することで、おそらく自分の質問に答えることができます。

特に、new()メソッドreturns false on errorですが、実際にフェッチされる前にURIを検証しているだけです。fetch()File :: Fetchオブジェクトを呼び出すと、Returns the full path to the downloaded file on success, and false on failure.

したがって、これらのメソッドが返すものを適宜処理してください。

編集:コードを投稿したので。$ uri_handleが未定義であるというエラーが表示される場合は、$ urlが正しく設定されていることを確認し、エラーを確認してください。1行目以降:

print $url;
print $uri_handle->error;
于 2012-09-07T03:57:42.960 に答える