Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

how to check syntax of code inside a scalar?

by tjking (Novice)
on Aug 04, 2010 at 18:33 UTC ( #852941=perlquestion: print w/ replies, xml ) Need Help??
tjking has asked for the wisdom of the Perl Monks concerning the following question:

Hi all, I've got some scripts that dynamically load Perl snippets from the filesystem, setup a few things for them, and then run them through eval(). Is there a way to check the syntax of code contained inside a scalar without having to run 'perl -c' on the external file? TIA

Comment on how to check syntax of code inside a scalar?
Replies are listed 'Best First'.
Re: how to check syntax of code inside a scalar?
by tilly (Archbishop) on Aug 04, 2010 at 18:46 UTC
    If you want the check to be right, then no. Nothing but perl can parse Perl.

    However Perl::Tidy does a usually acceptable job of figuring out Perl syntax.

      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; }

      Thanks!

        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.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://852941]
Approved by lostjimmy
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (9)
As of 2015-07-29 23:44 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (269 votes), past polls