sub reverse_iterator { my @list = @_; my $i = $#list; sub { return if $i < 0; return $list[$i--]; }; } my $foo = reverse_iterator(@ARGV); while (defined ($_ = $foo->())) { print; }