in reply to How to pass a variable string as conditional argument to if statment

use eval

if (eval $var) {

Note: you can also clean up your code a little bit by using q and qq in places where you want to include single and double quotes in strings.

#!/usr/bin/perl -w use strict; use warnings; my $hash_ref1 = { this => 'blarney', some => 'foo', chancy => 'at best', }; my $hash_ref2 = { this => 'that', some => 'thing', another => 'something', }; print "this is $$hash_ref2{'this'}\n"; my @a = ($hash_ref1, $hash_ref2); my $var = q{$$hash_ref{'this'} eq 'that'}; foreach my $hash_ref (@a) { if ($$hash_ref{'this'} eq 'that') { print qq{I only want to see case where: "this really does equa +l $$hash_ref{'this'}"\n}; } if (eval $var) { print "this really does equal $$hash_ref{'this'}\n\n"; } }

Replies are listed 'Best First'.
Re^2: How to pass a variable string as conditional argument to if statment
by sgrey (Novice) on May 17, 2011 at 20:42 UTC
    Thanks for the 'eval' redirect.  Did the trick, and since now that I get it, will appear alot more in my code. 
    Much Obliged!!!
    

      I'd actually recommend using anonymous subroutines much more than eval for something like this. Would change your code to the following:

      #!/usr/bin/perl -w use strict; use warnings; my $hash_ref1 = { this => 'blarney', some => 'foo', chancy => 'at best', }; my $hash_ref2 = { this => 'that', some => 'thing', another => 'something', }; print "this is $hash_ref2->{this}\n"; my @a = ($hash_ref1, $hash_ref2); my $test = sub {$_->{this} eq 'that'}; foreach (@a) { if ($_->{this} eq 'that') { print qq{I only want to see case where: "this really does equa +l $_->{this}"\n}; } if ($test->()) { print "this really does equal $_->{this}\n\n"; } }

      Or if you don't want to rely on the $_ variable, you can pass the variable as a parameter to the sub:

      my $test = sub {$_[0]->{this} eq 'that'}; foreach my $hash_ref (@a) { if ($hash_ref->{this} eq 'that') { print qq{I only want to see case where: "this really does equa +l $hash_ref->{this}"\n}; } if ($test->($hash_ref)) { print "this really does equal $hash_ref->{this}\n\n"; } }
        Hi, I have a variable $var = '10>5"; This string is obtained from a table and is stored in the variable. I want to evaluate this string. If it is true, then execute. E.g, if($var is true){ }else { } I tried to use eval but is not working as expected.