sub make_iterator { my (@list) = @_; return sub { # return a false value if exhausted return unless @list; # return next item in list return shift @list; }; } my $iter = make_iterator(1..5); while ( my $val = $iter->() ) { print $val, "\n"; }