sub reverse_iterator { my @list = @_; sub { return unless @list; $_[0] = pop @list; return 1; }; } my $foo = reverse_iterator(@ARGV); while ($foo->(my $val)) { print("$val\n"); }