有没有办法获得标量和使用smartmatch运算符(~~)完成的数组之间的比较所产生的匹配索引?
if ( $str ~~ @data ) {
#code to get index of array where match occurred
}
如果匹配则条件中的表达式将返回true,因此没有任何帮助。
在任何人给我上课之前:在非常简单的情况下,我确实喜欢smartmatch操作符,我不会在数据结构与数据结构或其他疯狂的任何疯狂比较中使用它。
答案 0 :(得分:6)
我没有在文档中找到一种方法(perldoc perlop
)。
use warnings;
use strict;
use List::MoreUtils qw(firstidx);
my @data = qw(red white blue green);
my $i = firstidx { $_ eq 'blue' } @data;
print "$i\n";
__END__
2
答案 1 :(得分:1)
我会使用装饰器。根据具体情况,可以更紧凑地编程,但这是一般的想法:
my $i = 0;
my @matches =
map { $_->[0] }
grep { $_->[1] eq $str }
map { [ $i++, $_ ] } @data;
if (@matches) {
# ...
}