use warnings; use strict; use List::MoreUtils qw( each_array ); my @array = ( 'a' .. 'g' ); my $a_obj = each_array( @array ); while( my $var = $a_obj->() ) { my $i = $a_obj->( 'index' ); print "got $var at $i\n"; }