in reply to Thoughts on using and, or, and not over && || !?

Hello Argel,

In addition to the potential predecence problems with or, it should be noted that Perl’s // (Logical Defined-Or) operator has no low-precedence equivalent, so if you get in the habit of using or in place of ||, you may more easily overlook situations in which // is a better fit:

13:09 >perl -Mstrict -wE "my ($y, $z); my $x = (defined $y or defined +$z or 'default'); say $x;" default

vs.

13:09 >perl -Mstrict -wE "my ($y, $z); my $x = $y // $z // 'default'; +say $x;" default 13:09 >

As a rule I use and and or for flow control only:

open(my $fh, '<', $filename) or die "Cannot open file '$filename' for +reading: $!";

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Replies are listed 'Best First'.
Re^2: Thoughts on using and, or, and not over && || !?
by Marshall (Canon) on Jul 12, 2016 at 06:59 UTC
    Good post++. I would just add that the //= version of this operator is also available.
    my $xyz; $xyz //= 'default'; print $xyz; #default
Re^2: Thoughts on using and, or, and not over && || !?
by ikegami (Patriarch) on Jul 17, 2016 at 21:06 UTC

    In addition to the potential predecence problems with or,

    Depends on context. While or is more likely to cause problems within an expression (aside from not being as visually distinctive), or is usually used for flow control because it's more likely to solve precedence problems in that situation. Compare

    open my $fh, '<', $qfn || die $!;
    with
    open my $fh, '<', $qfn or die $!;