http://qs321.pair.com?node_id=1060584


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 (Saint) 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)'

      See Quote and Quote-like Operators (and also Regexp Quote-Like Operators) in perlop.