develooper Front page | perl.perl6.language | Postings from August 2006

Re: === and array-refs

Thread Previous | Thread Next
From:
Darren Duncan
Date:
August 16, 2006 03:09
Subject:
Re: === and array-refs
Message ID:
p06230901c1089151433f@[192.168.1.100]
At 11:42 AM +0300 8/16/06, Markus Laire wrote:
>On 8/16/06, Darren Duncan <darren@darrenduncan.net> wrote:
>>The difference between === and eqv is that, if you have 2 symbols, $a
>>and $b, and $a === $b returns true, then that result is guaranteed to
>>be eternal if you don't assign to either symbol afterwards.
>
>So do you mean that this code
>  $a = "One";
>  $b = "One";
>  $aa := $a;
>  say "Same before" if $a === $b;
>  $aa = "Two";
>  say "Same after" if $a === $b;
>would print
>  Same before
>  Same after
>because here I have "2 symbols, $a and $b, and $a === $b returns true"
>and I don't assign to either symbol afterwards - and you seem to be
>saying that only with mutable types like Array can you change the
>contents via another symbol ($aa here).

Thanks for catching that typo.

What you are saying with your above example is correct, and I knew 
about that before, but it slipped my mind when I wrote my explanation 
before.

I'll try saying what I meant differently here:

The difference between === and eqv is that, if you have 2 symbols, $a 
and $b, and $a === $b returns true, then that result is guaranteed to 
be eternal if you don't assign to either symbol [or other symbols 
aliased to either] afterwards.

The idea is that, the degree to which === examines 2 variables to 
consider them equal or not is only so far as they are immutable.  So 
if you say "$foo = $bar", and then "$baz === $foo" returns true, then 
a subsequent assignment to or type-allowed mutation of $bar won't 
invalidate that $baz === $foo, but an assignment to $foo would.

-- Darren Duncan

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About