The || version is older and has the value of $b if $a is any false value including undef (which is pretty much Perl’s null/nil).
The // version has the value of $b iff $a is undef. Other “false” values carry through.
Ruby took both “no return required” and “no final semicolon required” from Perl (if not a few other things), I think, but it seems that // was Perl later borrowing Ruby’s || semantics. Interesting.
i.e. 0 || 1 is 1 in Perl but 0 in Ruby. Perl can 0// 1 instead if the 0, which is a defined value, needs to pass through.
Perl has both
$a || $band$a // $b.The
||version is older and has the value of$bif$ais any false value includingundef(which is pretty much Perl’snull/nil).The
//version has the value of$biff$aisundef. Other “false” values carry through.Ruby took both “no
returnrequired” and “no final semicolon required” from Perl (if not a few other things), I think, but it seems that//was Perl later borrowing Ruby’s||semantics. Interesting.i.e.
0 || 1is1in Perl but0in Ruby. Perl can0 // 1instead if the0, which is a defined value, needs to pass through.