my @array = ([1, 2, 3], [4, 5, 6], [7, 8, 9]); # non-destructive my $index = 0; sub nextitem { return if $index > $#array; return @{$array[$index++]}; } # more elegant, but destroys @array sub nextitem { return unless @array; return @{shift(@array)}; }