Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Perl';s grep不适用于取消引用的数组_Arrays_Perl_Grep_Dereference - Fatal编程技术网

Arrays Perl';s grep不适用于取消引用的数组

Arrays 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

我想在list习惯用法中找到一个与python
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.