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