Have a look at this very simple code and see what you expect it will do:
#!/usr/bin/perl use strict; use warnings; print "hello"; 1 =pod =cut __END__
It looks trivial right?
Not so.
$ perl /tmp/pl.pl Can't modify constant item in scalar assignment at /tmp/pl.pl line 13, at EOF Bareword "cut" not allowed while "strict subs" in use at /tmp/pl.pl line 8. Bareword "pod" not allowed while "strict subs" in use at /tmp/pl.pl line 8. Execution of /tmp/pl.pl aborted due to compilation errors.
Wait.
Wut?
Running it through Deparse reveals the culprit:
$ perl -MO=Deparse /tmp/pl.pl Can't modify constant item in scalar assignment at /tmp/pl.pl line 13, at EOF Bareword "cut" not allowed while "strict subs" in use at /tmp/pl.pl line 8. Bareword "pod" not allowed while "strict subs" in use at /tmp/pl.pl line 8. /tmp/pl.pl had compilation errors.
use warnings; use strict 'refs'; print 'hello'; 1 = 'pod' = 'cut'; __DATA__
Pesky indeed!.
The solution? Insert the humble
like your mother taught you to.
;
#!/usr/bin/perl use strict; use warnings; print "hello"; 1; =pod =cut __END__
$ perl /tmp/pl.pl hello
Perhaps this is worthy of applying a bugfix. Perl version = 5.12.1 =).