我在Perl脚本中使用File::Fetch。如何让File :: Fetch存储要在指定文件中下载的文件?
我试过了:
use File::Fetch;
my $ff = File::Fetch->new(uri => 'http://stackoverflow.com/users/63550');
#my $where = $ff->fetch() or die $ff->error; # Creates a file named "63550".
my $where = $ff->fetch(to => 'SO.html'); # Creates a subfolder named SO.html with a file named "63550" in it.
解决方法是在下载后重命名文件,但是是否可以立即指定文件名?
测试平台:
ActiveState Perl 64位。来自perl -v
:
v5.10.0 built for MSWin32-x64-multi-thread
Binary build 1004 [287188] provided by ActiveState.
答案 0 :(得分:2)
查看源代码,唯一的方法似乎是创建一个子类并覆盖output_file
方法。我想作者会接受一个使output_file
具有读/写属性的补丁,以便在运行时更改它。
答案 1 :(得分:1)
我查看了File::Fetch 0.22代码,看看你需要为此做些什么。有一个错误会阻止您进行子类化(除非您要覆盖new()
和create()
来修复它)。 更新 File::Fetch
开发人员已应用我的补丁,很快就会推出新版本。
最简单的事情可能是将文件提取到临时目录,使用output_file
发现名称,并将rename发送到最终位置。
output_file
无效:
#!perl
use strict;
use warnings;
BEGIN {
package File::Fetch::MyOutput;
use parent qw(File::Fetch);
sub output_file { die "I was called!" }
}
my $ff = File::Fetch::MyOutput->new(
uri => 'http://search.cpan.org/~bingos/File-Fetch-0.22/lib/File/Fetch.pm'
);
$ff->fetch( to => '.' );
当我运行它时,我最终在当前目录中使用 Fetch.pm 。该脚本不会因为它从未调用我的output_file
而死亡,因为该对象实际上并不在我的子类中。这是File::Fetch
中的一个错误,我将其归档为RT 53427。