my $sub = sub { my ($str) = @_; sub { $str } }->($str); #### my $sub = sub { my $str = $str; sub { $str } }->(); #### my $sub = do { my $str = $str; sub { $str } }; #### my $str_copy = $str; my $sub = sub { $str_copy }; #### for my $str (...) { ... sub { ... $str ... } ... } #### sub make_list_iterator { my @list = @_; return sub { return @list ? shift(@list) : (); }; } my $iter = make_list_iterator(@list);