我希望使用 Perl 的智能匹配对包含字符串和已编译正则表达式的数组进行查找:
do_something($file) unless ($file ~~ [ @global_excludes, $local_excludes ]);
(@global_excludes
数组和$local_excludes
数组引用都可以包含字符串或编译的正则表达式的混合。)
Perl 中的智能匹配有那么智能吗?目前,当我使用 v5.10.1 运行上述内容时,我得到:
Argument "script.sh" isn't numeric in smart match at test.pl line 422.
Argument "Debug.log" isn't numeric in smart match at test.pl line 422.
Argument "lib.pm" isn't numeric in smart match at test.pl line 422.
...
为什么 smartmatch 认为这$file
是一个数字?
现在,我只是手动操作:
do_something($file) unless exclude ($file, [ @global_excludes, $local_excludes ]);
exclude
看起来像这样:
sub exclude
{
my ($file, $list) = @_;
foreach my $lookup (@$list)
{
if (is_regexp($lookup))
{
return 1 if $file =~ $lookup;
}
else
{
return 1 if $file eq $lookup;
}
}
return 0;
}
基本上,我希望使解决方案更加 Perly。