use strict; use warnings; sub foo { my ($x) = @_; return sub { eval 'print "$x\n";' }; } sub bar { my ($x) = @_; return sub { $x if 0; eval 'print "$x\n";' }; } foo("foo")->(); bar("bar")->();