我只是想知道这是否合适:
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)
不,你不能,因为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)
| 归档时间: |
|
| 查看次数: |
1357 次 |
| 最近记录: |