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

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.