Начиная с Perl 5.12, теперь стал более гибким , также работая с массивами:
use 5.012;
use warnings;
my @tokens = 'a' .. 'z';
while (my ($i, $val) = each @tokens) {
if ($val =~ m/[aeiou]/) {
($i, $val) = each @tokens; # get next token after a vowel
print $val;
}
}
# => bfjpv
Одно предупреждение с each
, помните, что итератор является глобальным и не сбрасывается при выходе из цикла.
Например:
while (my ($i, $val) = each @tokens) {
print $val;
last if $i == 12;
}
# => abcdefghijklm
my ($i, $val) = each @tokens;
say "Now at => $val ($i)"; # Now at => n (13)
Поэтому используйте keys
или values
, чтобы вручную сбросить итератор:
keys @tokens; # resets iterator
($i, $val) = each @tokens;
say "Now at => $val ($i)"; # Now at => a (0)