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

Re: === and array-refs

Thread Previous | Thread Next
Ben Morrow
August 17, 2006 18:28
Re: === and array-refs
Message ID:

Quoth ("Mark J. Reed"):
> On 8/17/06, David Green <> wrote:
> > >    $a=[1, 2, \@x];
> > >    $c=[1, 2, \@x];
> > >    $d=[1, 2, \@y];
> > >
> > >So $a, $c, and $d may all have the same *value*
> > >(or "snapshot", when evaluated all the way down
> > >through nesting and references), i.e. they might
> > >be eqv, but only $a and $c are === because they
> > >have the same contents [unevaluated contents]
> > >and $d doesn't.
> In this case, it seems like [===] @$a, @$c would do what you want,
> yes?  It would return true, while [===] @$a,@$d would return false...
> In the general case - well, I think the thread demonstrates that it's
> hard to define a general case for what you want to do.   Based on your
> example, I assumed you wanted one-level dereferencing, regardless of
> the contents. But it sounds like what you want is infinite
> dereferencing as long as the referent is anonymous,  and no
> dereferencing if the referent is a named variable?

Surely that's a meaningless distinction? A named variable can become
anonymous if its name goes out of scope; an anon can be bound to a name.

Just to make sure I've got all this straight:

    =:= compares names
    === compares containers
    eqv compares values

So given an array @W, 

    my @X := @W;            # @X =:= @W
    my @Y =  @W;            # @Y === @W but @Y !=:= @W
    my @Z =  @W.clone;      # @Z eqv @W but @Z !=== @W

? This seems like a useful set of distinctions to me...



  The cosmos, at best, is like a rubbish heap scattered at random.

Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About