in reply to Can If-then conditions do ($a = $b = $c) type expressions?

$a == $b is 1, which is obviously not equal to 5. As was recommended, grep's probably the way to go. Or

$h{$_}++ for( $a, $b, $c ); if( $h{$a} == 3 ) { ... }

Update: Just as a clarification, that hash trick will only work for things that stringify to the same thing. So for example if $b = "5 ", it wouldn't work (even though 5 == "5 " is true).

Replies are listed 'Best First'.
Re: Re: Can If-then conditions do ($a = $b = $c) type expressions?
by snafu (Chaplain) on Apr 25, 2002 at 17:04 UTC
    Ahhh....yes. It didn't occur to me that ($a == $b) actually evaluates to true or 1 vs the value that they are set to which now makes sense. Excellent! Although, I do think that this kind of operation would be a nifty one to have available. It probably would be difficult to impossible to implement though.

    _ _ _ _ _ _ _ _ _ _
    - Jim
    Insert clever comment here...

      I don't know about easy to read but it can be done in a roundabout sort of way:
      $a = 5; $b = 5; $c = 5; if ((($a == $b ) + ($a -1)) == $c) { print "yes!!!\n"; }
      or better yet:
      # given three equal variables if (($a == $b ) == ($b == $c)) { print "yes!!!\n"; } # as pointed out by Sidhekin # given three different variables if (($a == $b ) == ($b == $c)) { print "yes!!!\n"; } # still prints 'yes!!!\n'. Why? # both sides evaluate to false or 0, # and 0 == 0 evaluates to true
      Again, I'm not saying I'd use this... ;0)

      Update: Thanks to Sidhekin for pointing out my misstep. It does work with 2 same and 1 different variable. ;0)




      Amel

        $a = 5; $b = 5; $c = 5; if ((($a == $b ) + ($a -1)) == $c) { print "yes!!!\n"; }

        Amel is one dangerous monk {grin} ... observe:

        $a = 6; $b = 5; $c = 5; if ((($a == $b ) + ($a -1)) == $c) { print "yes!!!\n"; }

        # given three equal variables if (($a == $b ) == ($b == $c)) { print "yes!!!\n"; }

        Yeah, right, "given three equal variables". Given three different variables, however ...

        $a = 6; $b = 4; $c = 5; if (($a == $b ) == ($b == $c)) { print "yes!!!\n"; }

        ++ for not saying you'd use this ;-)

        Update:... and here I had finally convinced myself Amel had to be joking ... oh well ...
        You're welcome to that ++ anyways — the joke is none the worse for being unintended ;)

        The Sidhekin
        print "Just another Perl ${\(trickster and hacker)},"