Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re: return value of "if" (documentation?)

by LanX (Saint)
on Jan 07, 2014 at 23:33 UTC ( [id://1069712]=note: print w/replies, xml ) Need Help??


in reply to return value of "if" (documentation?)

AFAIK are if and and opcode-wise identical

lanx@nc10-ubuntu:~$ perl -MO=Deparse -e ' print if $a ' print $_ if $a; -e syntax OK lanx@nc10-ubuntu:~$ perl -MO=Deparse,-p -e ' print if $a ' ($a and print($_)); -e syntax OK

This and short-circuiting should explain the returned values.

Cheers Rolf

( addicted to the Perl Programming Language)

Replies are listed 'Best First'.
Re^2: return value of "if" (documentation?)
by ikegami (Patriarch) on Jan 08, 2014 at 15:17 UTC

    Deparse tries to reproduce code, while Concise shows what's actually there.

    A more accurate demonstration:

    $ perl -MO=Concise,-exec -e'print if $a' 1 <0> enter 2 <;> nextstate(main 1 -e:1) v:{ 3 <#> gvsv[*a] s 4 <|> and(other->5) vK/1 5 <0> pushmark s 6 <#> gvsv[*_] s 7 <@> print vK 8 <@> leave[1 ref] vKP/REFC -e syntax OK $ perl -MO=Concise,-exec -e'$a and print' 1 <0> enter 2 <;> nextstate(main 1 -e:1) v:{ 3 <#> gvsv[*a] s 4 <|> and(other->5) vK/1 5 <0> pushmark s 6 <#> gvsv[*_] s 7 <@> print vK 8 <@> leave[1 ref] vKP/REFC -e syntax OK

    But the question is about the if statement.

    $ perl -MO=Concise,-exec -e'if ($a) { print }' 1 <0> enter 2 <;> nextstate(main 3 -e:1) v:{ 3 <#> gvsv[*a] s 4 <|> and(other->5) vK/1 5 <0> pushmark s 6 <#> gvsv[*_] s 7 <@> print vK 8 <@> leave[1 ref] vKP/REFC -e syntax OK
      > Deparse tries to reproduce code,

      True but B::Deparse has documented options to switch of the reconstruction of if from and-op. I chose one of the ways¹...

      I also checked it with B::Terse before posting, just wanted to keep the post short.

      Thanks for supporting my point. :)

      > But the question is about the if statement.

      Do you imply that a post-fix if is not a "statement" like pre-fix if ?

      Cheers Rolf

      ( addicted to the Perl Programming Language)

      ¹)

      -xLEVEL Expand conventional syntax constructions into equivalent ones that exp +ose their internal operation. ... If LEVEL is at least 7, "if" statements will be translated into equivalent expressions using "&&", "?:" and "do {}"; for instance
      lanx@nc10-ubuntu:~$ perl -MO=Deparse,-x7 -e 'if($a){print $b}' $a and do { print $b }; -e syntax OK

        B::Deparse has documented options to switch of the reconstruction of if from and-op. I chose one of the ways¹...

        Maybe I wasn't clear enough: B::Deparse can show they're similar as long as you assume the output is correct. B::Concise can show they're the same, and the output will be correct.

        Do you imply that a post-fix if is not a "statement" like pre-fix if ?

        No. The statement with the post-fix if is not an if statement, but I was not implying it's not a statement. I was implying it's not an if statement.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1069712]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others about the Monastery: (2)
As of 2024-04-20 05:29 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found