このイディオムは正常に動作するはずです。私はそれがうまくいかないコード例が役に立つと思う。ちょうどしかしこの即席玩具例として:
#!/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();
これは、「トマト」のための第二の試験ながら配列参照内の「サッカー」の最初のテストは、成功したことを示す次の出力、になりますそうではありませんでした:
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.
もっと具体的になることができますか? [mcve]を投稿してください。 'my $ var = 'foo'; grep {$ _ eq $ var} @ {[qw/foo bar /]} 'は5.20.1の魅力のように動作します。 – simbabque
'List :: Util :: any'は、最初のマッチ後に停止するため、この場合grepより優れているかもしれません。 –
['Data :: Munge :: elem'](https://metacpan.org/pod/Data::Munge#elem-SCALAR,-ARRAYREF)もこれを行うことができます。 – melpomene