in reply to Re: Re^2: To || or not to or and why.
in thread To || or not to or and why.

No.
my $value = shift() || 'default';
and
my $value = shift() or 'default';
will not work the same.
my $value = shift() || 'default';
will set $value to the value returned by shift() if it is true and to 'default' if it is false.
my $value = shift() or 'default';
will set $value to the value returned by shift() no matter what!
Here is an example using a handy tool B::Deparse that will show you how the compiler read your program, the -p adds extra parentheses to make it very clear.
#temp.pl $value = $x or $y or $z; $value = $x || $y || $z; $value = $x or $y || $z; $value = $x || $y or $z;
then run
perl -MO=Deparse,-p temp.pl
it outputs
((($value = $x) or $y) or $z); ($value = (($x || $y) || $z)); (($value = $x) or ($y or $z)); (($value = ($x || $y)) or $z); temp.pl syntax OK
if you notice
$value = $x or $y or $z;
and
$value = $x or $y || $z;
just set $value to the value of $x no matter what the value of $y or $z because or has a lower precidence than =.
Did you notice that
$value = $x || $y or $z;
will just set $value to the value of $x || $y no matter what the value of $z?

--

flounder