$ perl -E' use warnings; use strict; sub f { my $n="ok"; sub { eval q{$n} } } say f->() ' Variable "$n" is not available at (eval 1) line 2. Use of uninitialized value in say at -e line 4. $ perl -E' use warnings; use strict; sub f { my $n="ok"; sub { $n; eval q{$n} } } say f->() ' Useless use of private variable in void context at -e line 3. ok $ perl -E' use warnings; use strict; sub f { my $n="ok"; sub { $n if 0; eval q{$n} } } say f->() ' ok