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";
}   

但是 file 方法也失败了,因为它无法在 URL 中检索文件名。

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

1 回答 1

1

在尝试加载 URI 之前,您的 perl 脚本不会知道网络服务器上的内容和不知道的内容—— URL 看起来如何并不重要。您需要尝试获取文件并优雅地处理任何错误。

如果您发布代码会有所帮助,但您可能可以通过查看文档来回答您自己的问题。

特别是new()method 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 回答