use strict; use warnings; #return a pointer to a function that should be invoked sub makeLazy { my ($inp) = @_; sub { eval $inp; die if $@; }; } my $i = 1; my $part2 = makeLazy('print "\nnow its $i";'); print "\ni is ".$i++; $part2->(); print "\ni is $i";