in reply to testing an if statement in a string

```my @field = (0,0,0,0,0,0,'PM',0,'CAVENDI');
my \$cond = q((\$field[6] eq 'PM' && \$field[8] eq 'CAVENDI'));

my \$ret;
eval "\\$ret = \$cond";
warn \$@ if \$@;

print \$ret;

Replies are listed 'Best First'.
Re^2: testing an if statement in a string
by LanX (Cardinal) on Oct 31, 2013 at 15:43 UTC
> eval "\\$ret = \$cond";

a bit over complicated , eval returns (like sub or do) the result of the last expression.

```  DB<105> \$cond = q(\$field[6] eq 'PM' && \$field[8] eq 'CAVENDI');
=> "\\$field[6] eq 'PM' && \\$field[8] eq 'CAVENDI'"

DB<106> @field = ()

DB<107> \$ret =eval \$cond
=> ""

DB<108> @field = (0,0,0,0,0,0,'PM',0,'CAVENDI')
=> (0, 0, 0, 0, 0, 0, "PM", 0, "CAVENDI")

DB<109> \$ret =eval \$cond
=> 1

but checking \$@ is always a good idea! =)

##### update

or an additional eval BLOCK to catch all error

```~\$ perl
\$cond="bla eqx 2";
eval { \$ret =eval \$cond } or warn "Problem with \$cond";
__END__
Problem with bla eqx 2 at - line 2.

Cheers Rolf

( addicted to the Perl Programming Language)

Re^2: testing an if statement in a string
by brcjacks (Initiate) on Oct 31, 2013 at 15:03 UTC
Interesting. Why the double parenthesis in line 2?
Why the double parenthesis in line 2?

The outermost pair of parens are simply the paired delimiters of the  q// operator; a wide range of delimiters, paired or not, can be used by the various string and regex operators. The inner parens are copied from the string as it was given in the OP.

```>perl -wMstrict -le
"my \$s = q(foo);
print qq{'\$s'};
;;
\$s = q((bar));
print qq/'\$s'/;
"
'foo'
'(bar)'