C:\Users\Peter>perl -MO=Deparse -Mstrict -w -E "sub false { 0 } my $x=false || die 'Died',$x; say 'not reached';" Global symbol "$x" requires explicit package name (did you forget to declare "my $x"?) at -e line 1. -e had compilation errors. BEGIN { $^W = 1; } use strict; use feature 'current_sub', 'bitwise', 'evalbytes', 'fc', 'postderef_qq', 'say', 'state', 'switch', 'unicode_strings', 'unicode_eval'; sub false { 0; } my $x = false() || die('Died', ${'x'}); say 'not reached'; C:\Users\Peter>perl -MO=Deparse -Mstrict -w -E "sub false { 0 } my $x; $x=false || die 'Died',$x; say 'not reached';" BEGIN { $^W = 1; } use strict; use feature 'current_sub', 'bitwise', 'evalbytes', 'fc', 'postderef_qq', 'say', 'state', 'switch', 'unicode_strings', 'unicode_eval'; sub false { 0; } my $x; $x = false() || die('Died', $x); say 'not reached'; -e syntax OK