Nope, because when you put variables inside double-quoted strings, they get interpolated. This is something you should already know, as you would use it in common statements such as print "The value is $value. The dog's name is $dog{name}. The third element is $elements[2]."
See this:
use strict; use warnings; my %hash = ( foo => "bar", bar => "baz" ); sub testAndExec { my $cond = shift; if (eval $cond) { print "This is executed!\n"; } else { print "Not executing this time.\n"; } print "But there was an error:\n $@" if $@; print "\n"; } my $exeif = "!exist $hash{foo}"; print "Double quotes, existing key: <$exeif>\n"; testAndExec $exeif; $exeif = "!exist $hash{foo}"; print "Double quotes, existing key: <$exeif>\n"; testAndExec $exeif; $exeif = '!exists $hash{bar}'; print "Single quotes, existing key: <$exeif>\n"; testAndExec $exeif; $exeif = '!exists $hash{baz}'; print "Single quotes, non-existing key: <$exeif>\n"; testAndExec $exeif;
Output:
Double quotes, existing key: <!exist bar> Not executing this time. But there was an error: Can't locate object method "exist" via package "bar" (perhaps you +forgot to load "bar"?) at (eval 1) line 1. Double quotes, existing key: <!exist bar> Not executing this time. But there was an error: Can't locate object method "exist" via package "bar" (perhaps you +forgot to load "bar"?) at (eval 2) line 1. Single quotes, existing key: <!exists $hash{bar}> Not executing this time. Single quotes, non-existing key: <!exists $hash{baz}> This is executed!
Update: fixed a logical flaw spotted by AnomalousMonk. Thanks.
In reply to Re: Dynamic execution of expression
by muba
in thread Dynamic execution of expression
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |