in reply to Abuse of "or next" in expressions and "next" that returns value
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.
|
|---|