相关疑难解决方法(0)

我可以复制哈希而不重置其"每个"迭代器吗?

我正在使用each迭代Perl哈希:

while (my ($key,$val) = each %hash) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

然后发生了一些有趣的事情,我想打印出哈希值.起初我考虑的事情如下:

while (my ($key,$val) = each %hash) {
   if (something_interesting_happens()) {
      foreach my $k (keys %hash) { print "$k => $hash{$k}\n" }
   }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为每个人都知道在哈希上调用keys(或values)会重置用于的内部迭代器each,我们可能会得到一个无限循环.例如,这些脚本将永远运行:

perl -e '%a=(foo=>1); while(each %a){keys %a}'
perl -e '%a=(foo=>1); while(each %a){values %a}'
Run Code Online (Sandbox Code Playgroud)

没问题,我想.我可以制作哈希的副本,并打印出副本.

   if (something_interesting_happens()) {
      %hash2 = %hash;
      foreach my $k (keys %hash2) { print "$k => $hash2{$k}\n" }
   }
Run Code Online (Sandbox Code Playgroud)

但这也行不通.这也会重置each迭代器.实际上,%hash在列表上下文中的任何使用似乎都会重置其each …

perl

15
推荐指数
1
解决办法
434
查看次数

标签 统计

perl ×1