在对URL数据库执行file :: fetch时,某些URL仅包含顶级域,例如http://google.com。我如何构建我的if检查,以便它将验证是否有一个文件被提取,所以当我创建一个新的文件:: 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处检索文件名。
Thread 1 terminated abnormally: Can't call method "file" on an undefined value at C:\test\multihashtest2.pl line 102.
答案 0 :(得分:1)
您的perl脚本将不知道Web服务器上的内容以及在尝试加载URI之前没有的内容 - URL无关紧要。您需要尝试获取文件并优雅地处理任何错误。
如果您发布了代码会有所帮助,但您可以通过查看the documentation来回答您自己的问题。
特别是new()
方法returns false on error
,但这只是在实际获取之前验证URI。当您在File :: Fetch对象上调用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;