perl结合地图和每个

Ric*_*ard 0 perl

我只是想知道这是否合适:

use Modern::Perl;

my @list = ('a' .. 'j');

map { func($_) } each(@list);

sub func {
  my ($index, $value) = @_;
  say "$index => $value";
}
Run Code Online (Sandbox Code Playgroud)

Bor*_*din 7

不,你不能,因为each每次调用它都会返回一个键/值对.您只调用一次,因此它将传递(0, $list[0])map,并且子例程将为每个值调用一次.

如果你想func用每个键/值对调用,你可以写

map { func($_, $list[$_]) } keys @list;
Run Code Online (Sandbox Code Playgroud)

但这是滥用,map因为它是用于将一个列表映射到另一个列表.您应该使用for,而不是像这样

func($_, $list[$_]) for keys @list;
Run Code Online (Sandbox Code Playgroud)

你也可以each这样使用

my ($i, $v);
func($i, $v) while ($i, $v) = each @list;
Run Code Online (Sandbox Code Playgroud)