in reply to Python 'is' command

Actually for references '==' is comparing for the same instance (referential equality). For recent enough perls the smartmatch ~~ operator can do at least a first level check for structural or object equality. If you want to compare if they more deeply nested structures contain the same contents you need do more work; see the FAQ "How do I test whether two arrays or hashes are equal?".

$ perl -MTest::More -dE 0 [...] DB<1> $a = { qw/a 1 b 2/ } DB<2> $b = { qw/a 1 b 2/ } DB<3> x $a 0 HASH(0x7f9140905ad0) 'a' => 1 'b' => 2 DB<4> x $b 0 HASH(0x7f914090b698) 'a' => 1 'b' => 2 DB<5> x $a == $b 0 '' DB<6> x is_deeply( $a, $b ) ok 1 0 1 DB<7> x is_deeply( $a, {} ) not ok 2 # Failed test at /Users/nbkawb9/perl5/lib/perl5/Test/Builder.pm line + 152. # Structures begin differing at: # $got->{a} = '1' # $expected->{a} = Does not exist 0 0 DB<8> q

Additionally: For real fun check out Lisp which has several predicates for different amounts of equality.

Edit: Tweaked slightly ambiguous "they" to more explicit wording.

The cake is a lie.
The cake is a lie.
The cake is a lie.

Replies are listed 'Best First'.
Re^2: Python 'is' command
by haukex (Archbishop) on Aug 14, 2019 at 20:19 UTC
    For recent enough perls the smartmatch ~~ operator

    Smart matching was retroactively documented as experimental since v5.16 (2012), and once in a while there are discussions on P5P on completely overhauling its behavior. I wouldn't recommend it, as code relying on it may break on newer versions of Perl. As of v5.18 using it will generate warnings about its experimental status.

    I also mentioned that the behavior of == can be changed with operator overloading in my other replies in this thread.