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