从文档中可以很好地复制以下内容。
use File::GlobMapper qw( globmap );
for my $pair (globmap '<*.tar.gz>' => '<#1.tgz>' )
{
}
它给出了
String found where operator expected at globmapper_test1.pl line 4, near "globmap '<*.tar.gz>'"
(Do you need to predeclare globmap?)
(在Windows上使用ActivePerl 5.10.0)
附带问题 - 如果GlobMapper只导出一个函数,为什么要设置它以便你必须明确导出它?
答案 0 :(得分:3)
这是File::GlobMapper中的错误。它设置了@EXPORT_OK
变量,但实际上并未使用Exporter。
但它变得更糟。 globmap
不返回arrayrefs列表(如文档中所述)。它确实返回了一个arrayrefs的arrayref。所以你真的要写:
use File::GlobMapper;
for my $pair (@{ File::GlobMapper::globmap('<*.tar.gz>' => '<#1.tgz>') }) {
my ($from, $to) = @$pair;
}
答案 1 :(得分:1)
我从未使用过File::GlobMapper,但我刚从CPAN下载它,并且
我转载了你的信息。解决此问题的一种方法是使用完全限定的呼叫
到globmap
函数。尝试这样的东西:
use File::GlobMapper;
for my $pair (File::GlobMapper::globmap('<*.tar.gz>' => '<#1.tgz>'))
{
}
看来POD没有显示使用代码的正确方法。 您可以提交有关CPAN的错误报告。如果你包括一个补丁最好 POD。
查看GlobMapper.pm
的源代码,似乎它实际上并没有使用Exporter模块。这将解释错误消息。我不认为代码可以导出任何函数。
答案 2 :(得分:1)
对于您的附带问题:要导出的子程序名称无关紧要。不隐式导入是一个好主意,所以你不要踩踏调用文件已经完成的任何事情。