C:\test>perl -c use POSIX qw[ceil floor]; print ceil($a), floor($b); POSIX.pm processed no POSIX qw[ceil floor]; print ceil($a), floor($b); ^Z - syntax OK C:\test> #### C:\test>perl -c sub cool(){ print 'cool',$/; } my $a = cool; ^Z - syntax OK #### #! perl -slw use strict; while() { chomp; my $code = $_; tr/\n//d; s[(?:sub)*\s*((?:INIT|CHECK|BEGIN|END)\s*{)][sub syntax_check_$1]g; s[\b(?:use)\b\s*][no ]g; eval 'return;' . $_; print "'$_' \n\t: ", $@ ? "Fails with\n$@" : 'Passes syntax check'; } __END__ INIT { print '*** INIT GOTCHA!!! ***'; } sub INIT { print '*** INIT GOTCHA!!! ***'; } CHECK{ print '*** CHECK GOTCHA!!! ***'; } sub CHECK{ print '*** CHECK GOTCHA!!! ***'; } BEGIN{ print '*** BEGIN GOTCHA!!! ***'; } sub BEGIN{ print '*** BEGIN GOTCHA!!! ***'; } END { print '*** END GOTCHA!!! ***'; } sub END { print '*** END GOTCHA!!! ***'; } require 'POSIX'; do 'POSIX.pm'; use POSIX qw[ceil floor]; $a=ceil($b); $b=floor($a); my $a = 1; my $a = cool; my $ #### C:\test>231561 'sub syntax_check_INIT { print '*** INIT GOTCHA!!! ***'; }' : Passes syntax check Subroutine syntax_check_INIT redefined at (eval 2) line 1, line 2. 'sub syntax_check_INIT { print '*** INIT GOTCHA!!! ***'; }' : Passes syntax check 'sub syntax_check_CHECK{ print '*** CHECK GOTCHA!!! ***'; }' : Passes syntax check Subroutine syntax_check_CHECK redefined at (eval 4) line 1, line 4. 'sub syntax_check_CHECK{ print '*** CHECK GOTCHA!!! ***'; }' : Passes syntax check 'sub syntax_check_BEGIN{ print '*** BEGIN GOTCHA!!! ***'; }' : Passes syntax check Subroutine syntax_check_BEGIN redefined at (eval 6) line 1, line 6. 'sub syntax_check_BEGIN{ print '*** BEGIN GOTCHA!!! ***'; }' : Passes syntax check 'sub syntax_check_END { print '*** END GOTCHA!!! ***'; }' : Passes syntax check Subroutine syntax_check_END redefined at (eval 8) line 1, line 8. 'sub syntax_check_END { print '*** END GOTCHA!!! ***'; }' : Passes syntax check 'require 'POSIX';' : Passes syntax check 'do 'POSIX.pm';' : Passes syntax check 'no POSIX qw[ceil floor]; $a=ceil($b); $b=floor($a);' : Passes syntax check 'my $a = 1;' : Passes syntax check 'my $a = cool;' : Fails with Bareword "cool" not allowed while "strict subs" in use at (eval 13) line 1, line 13. 'my $' : Fails with Can't use global $; in "my" at (eval 14) line 2, near "my $ ;" syntax error at (eval 14) line 2, at EOF