You got (1)? That would be a bug. I get an empty list, as I expect. foo() returns an empty list, which is assigned to @thingies. bar() is called, but its result is discarded.my @thingies = foo() or bar(); warn @thingies; # Expected (3,4) here, got (1)
And rightly so. This is exactly the same expression as the first one. The parens are for precedence only, and a fairly trivial one.my @thingies = ( foo() ) or ( bar() ); warn @thingies; # Expected (3,4) here too, got ()
however, with or, why doesn't the first sub get called in list context, return false with the empty list, and let the second sub get called?But this is exactly what is happening! Perhaps you don't realize the difference between or and ||: precedence. or has a low precedence, lower than assignment. Perhaps you want:
my @thingies = foo (); @thingies = bar () unless @thingies;
Abigail
In reply to Re: Precendence and wantarray puzzling me
by Abigail-II
in thread Precendence and wantarray puzzling me
by ViceRaid
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |