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

use*_*061 0 perl

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

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

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

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

too*_*lic 6

我没有在docs(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
Run Code Online (Sandbox Code Playgroud)

  • firstidx的一个优点是它一旦匹配就停止搜索你的数组,而grep总是搜索整个数组. (4认同)
  • 好吧,这似乎是一件好事......我会选择grep:我的@arr_index = grep {$ data [$ _] eq $ str} 0 .. $#data; 我会保持问题公开,万一有人有一个疯狂的建议...... (3认同)