Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

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

by tjking (Novice)
on Aug 04, 2010 at 19:42 UTC ( #852954=note: print w/replies, xml ) Need Help??

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

Uggh, it's a bit shortsighted that there's no built-in function for this. However, after playing a bit, I've found that this can be simulated without having to actually execute the scalar's contents by pre-pending "return;" and testing with eval:

sub syntax_ok { my $source = "return;\n" . shift; eval $source; return 1 unless $@; return 0; }


Replies are listed 'Best First'.
Re^3: how to check syntax of code inside a scalar?
by Crackers2 (Parson) on Aug 04, 2010 at 21:04 UTC

    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.

      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

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://852954]
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others romping around the Monastery: (4)
As of 2023-12-01 06:36 GMT
Find Nodes?
    Voting Booth?

    No recent polls found