遍历列表很容易:
foreach my $elem ( 1, 2, 3, 4, 5 ) {
say $elem;
}
或匿名数组:
foreach my $elem (@{[ 1, 2, 3, 4, 5 ]}) {
say $elem;
}
但是有可能对匿名哈希做同样的事情吗?我试过:
while (my ($key, $value) = each (%{{ a => 1, b => 2, c => 3 }})) {
say "$key=$value";
}
但我得到了一个无限循环。
最佳答案
foreach 循环计算其表达式一次。 while
,另一方面,每次通过评估其表达式。这意味着您要反复创建一个新的散列并获取它的第一个元素。
您可以执行以下操作:
use List::Util 1.29 qw( pairs );
for my $pair ( pairs %{ { a => 1, b => 2, c => 3 } } ) {
my ( $key, $val ) = @$pair;
...
}
但就像您的第二个代码段是第一个代码段的不必要的浪费和复杂版本一样,以上是以下内容的不必要的浪费和复杂版本:
use List::Util 1.29 qw( pairs );
for my $pair ( pairs a => 1, b => 2, c => 3 ) {
my ( $key, $val ) = @$pair;
...
}
关于Perl:是否可以迭代匿名哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39802727/