Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

ne vs. ! eq

by boerni (Novice)
on Feb 25, 2020 at 13:34 UTC ( #11113400=perlquestion: print w/replies, xml ) Need Help??

boerni has asked for the wisdom of the Perl Monks concerning the following question:

Hey Monks I never realized perl behaves like this. There is a difference between (! 'a' eq 'b') and ('a' ne 'b').
#!perl use strict; use warnings; use Data::Dumper; my $s1 = 'bla'; my $s2 = 'blu'; my $r = $s1 eq $s2; print Dumper $r; if (! $s1 eq $s2) { print "$s1 and $s2 are not the same\n"; } else { print "$s1 and $s2 are the same\n"; } exit 0;
prints:
$VAR1 = ''; bla and blu are the same

The "correct" ($s1 ne $s2) works as expected. But why does (! $s1 eq $s2) not work?

Probably there is a simple explanation but I don't know it... Maybe one of you Monks can explain this.

Thank you

Replies are listed 'Best First'.
Re: ne vs. ! eq
by haukex (Chancellor) on Feb 25, 2020 at 13:38 UTC

    Precedence. See perlop: ! $s1 eq $s2 is the same as (!$s1) eq $s2, and not !( $s1 eq $s2 ), as B::Deparse will tell you:

    $ perl -MO=Deparse,-p -e 'if (! $s1 eq $s2) {}' if (((!$s1) eq $s2)) { (); }

    You'll need to write either if ( !( $s1 eq $s2 ) ), if ( not $s1 eq $s2 ), unless ( $s1 eq $s2 ), or of course if ( $s1 ne $s2 ).

      Thank you very much haukex!
Re: ne vs. ! eq
by LanX (Archbishop) on Feb 25, 2020 at 19:54 UTC
    Just wanted to add:

    That's a good demo to highlight why Perl has two boolean negations: not and !

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://11113400]
Approved by haukex
Front-paged by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (4)
As of 2020-03-31 03:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    To "Disagree to disagree" means to:









    Results (179 votes). Check out past polls.

    Notices?