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


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

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.

  • Comment on Re: how to check syntax of code inside a scalar?

Replies are listed 'Best First'.
Re^2: how to check syntax of code inside a scalar?
by tjking (Novice) on Aug 04, 2010 at 19:42 UTC

    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.

        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