use v5.12; use warnings; use Data::Dump qw/pp dd/; { my $var = 42; sub foo { warn $var; } sub bar { eval 'warn $var'; } foo(); bar(); } foo(); bar(); #### 42 at c:/tmp/pm/closure_demo.pl line 9. 42 at (eval 1) line 1. 42 at c:/tmp/pm/closure_demo.pl line 9. Variable "$var" is not available at (eval 2) line 1. Use of uninitialized value $var in warn at (eval 2) line 1. Warning: something's wrong at (eval 2) line 1.