• palordrolap@kbin.social
    link
    fedilink
    arrow-up
    7
    ·
    edit-2
    11 months ago

    Perl has both $a || $b and $a // $b.

    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.