Dear Monks,

I was reading up on the now-experimental given and thinking about using if instead for now.

print "$_ is ", do { if ($_==0) { "zero" } elsif ($_>0) { "pos" } else { "neg" } }, "\n" for -1..1; # Output: # -1 is neg # 0 is zero # 1 is pos

So it looks like the if evaluates to the value of the last statement of the executed block (at least on my v5.10.1, in case that makes a difference). This seems to make sense to me, since it's kind of like the return value of subs and evals being the value of the last statement. (As an interesting side note, a few quick tests show that an if without an else returns "". Also, do { for (0..5) { "F($_)" } } generates a warning about the string being in void context, and returns nothing, so the above doesn't seem to be true for all compound statements.)

My question is: Is this documented behavior, and if yes, where is it documented? I read the relevant-seeming sections of perlsyn and skimmed over the rest, did a bit of googling, and no obvious place has yet popped out, even though it feels like this should be stated somewhere - especially since the return value of given is documented in detail.

P.S. If I'm just having a particularly dense moment here and missed the place where it's documented, my apologies in advance.

P.P.S. I'm aware that the above style of code might not be the easiest to read, my question just comes from reading the given docs on its return value.


In reply to return value of "if" (documentation?) by Anonymous Monk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.