Steve Thames am Freitag, 31. März 2006 15.41:
> Consider this:
>
>       my %names = (Bob => 'Robert Brower');
>       my $caption = 'Name: $names{Bob)';
>       print  eval "qq|$caption|";
>
> If you can't see it, there is a syntax error in $caption: closing
> paren ) instead of brace }.  The eval will produce no $@ and will
> return the empty string.
>
> As screwy as this looks, I have a very good reason for using this
> capability.  I have written a powerful code generation tool that
> relies heavily on this.
>
> Does anyone have any idea how to capture the syntax error in a case
> like this?

What about:

===
#!/usr/bin/perl
use strict;
#use warnings;

my %names = (Bob => 'Robert Brower');
my $caption = 'Name: $names{Bob)';
my $caption2 = 'Name: $names{Bob}';

eval "eval {qq|$caption|}";
print "Error: [EMAIL PROTECTED]" if $@;

eval "eval {qq|$caption2|}";
print "Error: $@" if $@;
print "going on...\n";
===

$ ./script.pl
Error: syntax error at (eval 1) line 1, near "Bob)"
Missing right curly or square bracket at (eval 1) line 1, within string

going on...

Reply via email to