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

Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

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.