Arrays Perl';s grep不适用于取消引用的数组
我想在list习惯用法中找到一个与pythonArrays Perl';s grep不适用于取消引用的数组,arrays,perl,grep,dereference,Arrays,Perl,Grep,Dereference,我想在list习惯用法中找到一个与pythonvar等价的perl,但我无意中发现了这一点 perl grep可以执行grep{$\ueq$var}@list表达式来匹配列表逻辑中的元素 如果我使用一个像grep{$\ueq$var}@$list这样的解除保护数组,将$list定义为['foo','bar',],我不会得到相同的结果 有没有一种方法可以让grep使用非引用数组工作?这个习惯用法应该可以很好地工作;我认为一个不起作用的代码示例会有所帮助。不过,作为一个快速玩具的例子: #!/usr
var等价的perl,但我无意中发现了这一点
perl grep可以执行grep{$\ueq$var}@list
表达式来匹配列表逻辑中的元素
如果我使用一个像grep{$\ueq$var}@$list
这样的解除保护数组,将$list定义为['foo','bar',],我不会得到相同的结果
有没有一种方法可以让grep使用非引用数组工作?这个习惯用法应该可以很好地工作;我认为一个不起作用的代码示例会有所帮助。不过,作为一个快速玩具的例子:
#!/usr/bin/perl
use strict;
use warnings;
use Test::More;
sub find_var {
my ($var,$array) = @_;
print "Testing for $var in [" . join(',',@$array) . "]...\n";
if ( grep $var eq $_, @$array ) {
return "found it";
} else {
return "no match!\n";
}
}
my @array = qw(apple pear cherry football);
my $var = 'football';
my $var2 = 'tomato';
is(find_var($var, \@array), 'found it');
is(find_var($var2, \@array), 'found it');
done_testing();
这将导致以下输出,这表明数组引用中“football”的第一次测试成功,而“tomato”的第二次测试未成功:
你能说得更具体些吗?请发一封电子邮件<代码>我的$var='foo';为grep{$\ueq$var}{[qw/foo bar/]}
对我来说就像5.20.1上的一个符咒。List::Util::any
在这种情况下可能比grep
更好,因为它在第一次匹配后停止。我也可以这样做。刚刚意识到我的错误是一个简单的打字错误,是的,这个习惯用法应该适用于解引用数组
Testing for football in [apple,pear,cherry,football]...
ok 1
Testing for tomato in [apple,pear,cherry,football]...
not ok 2
# Failed test at array.pl line 22.
# got: 'no match!
# '
# expected: 'found it'
1..2
# Looks like you failed 1 test of 2.