Rubyのeach_with_indexは添字と要素が一度に取れるのでとても便利なときがある。 Perlで同じことをするには、5.12までは、ループ外に変数を置いて、ループ内でインクリメントするのが一般的だったけれど 5.12からはeach()が配列に対しても使えるようになって、添字と要素が一度に取れるようになった。 が、これを途中で止めて、再度eachを使用すると、その途中からループが始まってしまう。 内部的なイテレータの状態を保持しているらしい。 use strict; use warnings; package Hoge { sub new { bless [[1..10],[11..20],[21..30]], __PACKAGE__; } sub print_key { my $self = shift; while (my ($i, $elm) = each @$self) {