my @toprocess = qw (a1 a2 a3 a4 a5); my @processed = (); my $i = 10; # avoid an infinite loop while (my $item = shift @toprocess) { push @toprocess, 'x' ; unshift @processed, 'y' ; push @processed, $item; print "array has ". scalar @toprocess. " items left. This one is $item\n"; last unless $i--; # break out of infinite loop for this example }