Hi vr,
...unexpected is that this "next unless" thing is actually valid and does return valueI'm sorry but I don't understand where you get that next unless returns a value?
next is just like a continue statement in C. If it is called, it just jumps out of whatever it is doing and transfers control to the for loop.
... || next is AFAICS 100% equivalent to next unless ...
In your for loop you go through a scalar reference to 0 so the scalar that is tested is NOT 0 (or in other words NOT false). The value is valid so the next is not executed. The value is dereferenced to 0 and is printed to the console. The next loop you execute is with the value 0 and in the statement is interpreted as 0 (or in other words false). So the || statement will execute the next command which is next ;. All execution is interrupted and control is transferred to for and nothing is printed.
I hope this makes sense
Veltro
Edit: One more thing that I noticed:
next unless exists $ht-> { Default };
is not the same as:
... ->{ Default } || nextIn the first fragment next will only be executed in case the Default value does not exists. In case ...->{ Default } returns 0 then next will also be excuted. So be carefull with that.
In reply to Re: Abuse of "or next" in expressions and "next" that returns value
by Veltro
in thread Abuse of "or next" in expressions and "next" that returns value
by vr
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |