The manual says map "Evaluates the BLOCK or EXPR for each element of LIST (locally setting $_ to each element) and returns the list value composed of the results of each such evaluation."
A block evaluates to what its last statement evaluates, so the real question is: "What does if evaluate to?"
I can't find that in the manual, and that's because if was never meant to be used as an expression. The value to which if evaluates is a side-effect of implementation more than anything else.
if ( EXPR ) BLOCK
is implemented very similarly to
do { ( EXPR ) and do BLOCK };
as seen below:
$ perl -MO=Concise,-exec -e'if (f()) { g() }' 1 <0> enter 2 <;> nextstate(main 3 -e:1) v:{ 3 <0> pushmark s 4 <#> gv[*f] s/EARLYCV 5 <1> entersub[t3] sKS/TARG,1 6 <|> and(other->7) vK/1 7 <0> pushmark s 8 <#> gv[*g] s/EARLYCV 9 <1> entersub[t6] vKS/TARG,1 a <@> leave[1 ref] vKP/REFC -e syntax OK $ perl -MO=Concise,-exec -e'do { (f()) and do { g() } };' 1 <0> enter 2 <;> nextstate(main 3 -e:1) v:{ 3 <0> pushmark s 4 <#> gv[*f] s/EARLYCV 5 <1> entersub[t3] sKPS/TARG,1 6 <|> and(other->7) vK/1 7 <0> pushmark s 8 <#> gv[*g] s/EARLYCV 9 <1> entersub[t6] vKS/TARG,1 a <@> leave[1 ref] vKP/REFC -e syntax OK
That means that if evaluates to the same thing as its condition if the condition evaluates to something false, and if evaluates to the same thing as its body otherwise.
In your code, it returns the result of the comparion (sv_false, which holds triplevar(0, 0.0, "")) or the result of the assignment ($max, which is currently equal to $_).
In reply to Re: Map Function Weirdness
by ikegami
in thread Map Function Weirdness
by rthawkcom
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |