http://www.perlmonks.org?node_id=608328


in reply to My habitual errors

Even after all this time, I still sometimes inadvertently use assignment instead of testing for numeric equality:

if ($first = $second) { # do something } else { # this code is never executed since assignment to $first always retu +rns true }

Sigh. It is dumb, but I did it just last week.

Update: as pointed out by jdporter, in cases where $second evaluates as false, the resulting assignment to $first will also return false. While this rarely happens to me (since I'm usually trying to evaluate numerical equality between non-zero variables), it is an important distinction.

Replies are listed 'Best First'.
Re^2: My habitual errors
by imp (Priest) on Apr 04, 2007 at 17:29 UTC
    For comparisons that have a constant I keep that value on the left hand side to avoid accidental assignment. Doesn't work for expressions that use two variables of course.
    if (0 == $n) { } elsif (1 == $n) { }
Re^2: My habitual errors
by jdporter (Chancellor) on Apr 04, 2007 at 17:33 UTC
    # this code is never executed since assignment to $first always returns true

    No; it will be false when $second is false.

    A word spoken in Mind will reach its own level, in the objective world, by its own weight