Из perldoc -f каждый мы читаем:
Существует один итератор для каждого хэша, который разделяется всеми
each
,keys
иvalues
вызовами функций в программе; он может быть reset, читая все элементы из хэша или оцениваяkeys HASH
илиvalues HASH
.
Итератор не reset, когда вы покидаете область, содержащую each()
, и это может привести к ошибкам:
my %h = map { $_, 1 } qw(1 2 3);
while (my $k = each %h) { print "1: $k\n"; last }
while (my $k = each %h) { print "2: $k\n" }
Выход:
1: 1
2: 3
2: 2
Каковы общие обходные пути для такого поведения? И стоит ли вообще использовать each
?