use strict; use warnings; use Data::Dumper; print "in main: ", Dumper $^S; eval 'BEGIN { print "In eval STRING BEGIN: ", Dumper $^S; } print "in eval STRING: ", Dumper $^S'; eval { BEGIN { print "in eval BLOCK BEGIN: ", Dumper $^S;} print "in eval BLOCK: ", Dumper $^S; }; __END__ in eval BLOCK BEGIN: $VAR1 = undef; in main: $VAR1 = '0'; In eval STRING BEGIN: $VAR1 = undef; in eval STRING: $VAR1 = '1'; in eval BLOCK: $VAR1 = '1';