use warnings; use strict; my $xyz = 0; if($xyz) { eval { $main::globalvar = undef; print STDERR __LINE__, ": eval'd\n"} } printf "%d: if(%d) => didn't eval\n", __LINE__, $xyz; $xyz = 1; if($xyz) { eval { $main::globalvar = undef; print STDERR __LINE__, ": eval'd\n"} } printf "%d: if(%d) => did eval => '%s'\n", __LINE__, $xyz, defined $main::globalvar ? $main::globalvar : '';