perl-modperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Steve Thames <st...@softlife.com>
Subject Re: Nested Interpolation
Date Fri, 31 Mar 2006 14:25:21 GMT
On Fri, 31 Mar 2006 08:48:20 -0500, Michael Peters
<mpeters@plusthree.com> wrote:

>
>
>Steve Thames wrote:
>> 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?
>
>It's not a syntax error, per say. Perl's string parser will look in
>double quoted strings for something that looks like a variable. If it
>couldn't be interpreted as a valid variable outside of the string it is
>ignored. It can't possibly through an error since there are a million
>different things that might look kinda like a variable, but aren't really.

Consider this:

	my %names = (Bob => 'Robert Brower');
	print eval "Name: $names{Bob)";

This produces:

syntax error at test.pl line 3, near "Bob)"
Missing right curly or square bracket at test.pl line 5, within string

In this construction:

 	my %names = (Bob => 'Robert Brower');
 	my $caption = 'Name: $names{Bob)';
 	print  eval "qq|$caption|";

I am simply nesting the interpolation.  The eval returns nothing and
$@ is empty.  The syntax error is still happening which is why the
eval fails.  I simply want to capture the error and report it.

	


Mime
View raw message