http://www.perlmonks.org?node_id=852971


in reply to Re^2: how to check syntax of code inside a scalar?
in thread how to check syntax of code inside a scalar?

Bad idea... try it with this:

syntax_ok(qq{BEGIN { print "yay\n"; }});

and you'll see that the BEGIN block still gets run, bypassing your return statement. So I'd consider it rather unsafe.

Replies are listed 'Best First'.
Re^4: how to check syntax of code inside a scalar?
by snoopy (Curate) on Aug 04, 2010 at 21:55 UTC
    This does however seem to match the perl -c syntax check. From perlrun:
           -c   causes Perl to check the syntax of the program and then exit
                without executing it.  Actually, it will execute "BEGIN",
                "UNITCHECK", "CHECK", and "use" blocks, because these are
                considered as occurring outside the execution of your program.
                "INIT" and "END" blocks, however, will be skipped.
    
    perl -c -e 'BEGIN { print "yay\n"; }; print "boo\n"'
    yay -e syntax OK
      What if you always inject a
      BEGIN {exit}
      will it still do the compile step?
      the hardest line to type correctly is: stty erase ^H
        I't wouldn't do the compile step, but because this happens early, it would pretty well bypass any syntax checking whatsoever:
        perl -c -e 'BEGIN{exit}; BEGIN{print "yay\n"};@&$^^#@!.' -e syntax OK