c:\@Work\Perl>perl -wMstrict -le "confuse_the_issue(my $x, my %hash); ;; sub confuse_the_issue { print qq{x: $x}; for $x (keys %hash) { print qq{$x $hash{$x}}; } } " Use of uninitialized value $x in concatenation (.) or string at -e line 1. x: c:\@Work\Perl>perl -wMstrict -le "sub confuse_the_issue { print qq{x: $x}; for $x (keys %hash) { print qq{$x $hash{$x}}; } } ;; confuse_the_issue(my $x, my %hash); " Global symbol "$x" requires explicit package name at -e line 1. Global symbol "$x" requires explicit package name at -e line 1. Global symbol "%hash" requires explicit package name at -e line 1. Global symbol "$x" requires explicit package name at -e line 1. Global symbol "%hash" requires explicit package name at -e line 1. Global symbol "$x" requires explicit package name at -e line 1. Execution of -e aborted due to compilation errors.