获取数组的索引作为smartmatch操作的结果?

时间:2013-12-12 00:50:08

标签: perl

有没有办法获得标量和使用smartmatch运算符(~~)完成的数组之间的比较所产生的匹配索引?

if ( $str ~~ @data ) {
   #code to get index of array where match occurred
}

如果匹配则条件中的表达式将返回true,因此没有任何帮助。

在任何人给我上课之前:在非常简单的情况下,我确实喜欢smartmatch操作符,我不会在数据结构与数据结构或其他疯狂的任何疯狂比较中使用它。

2 个答案:

答案 0 :(得分:6)

我没有在文档中找到一种方法(perldoc perlop)。

List::MoreUtils

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) {
    # ...
}