Dave Whipp wrote:
Darren Duncan wrote:
> Assuming that all elements of $a and $b are themselves immutable to all
> levels of recursion, === then does a full deep copy like eqv.  If at any
> level we get a mutable object, then at that point it turns into =:= (a
> trivial case) and stops.

   ( 1, "2.0", 3 ) === ( 1,2,3 )

True or false?

More imprtantly, how do I tell perl what I mean? The best I can think of is:

   [&&] (@a »==« @b)
Vs
   [&&] (@a »eq« @b)

But this only works for nice flat structures.

IIRC, this is because the implicit coercion to number or string gets
in the way.

IMHO, "@a == @b" ought to be synonymous with "all (@a »==« @b)" - it's
far more likely to DWIM.  Likewise with "@a eq @b" and "all (@a »eq«
@b)".  If what you want to do is to compare the lengths of two lists,
you ought to do so explicitly: "[EMAIL PROTECTED] == [EMAIL PROTECTED]".

Getting back to the notion of immutability: can someone give me an
example of a realistic immutable analog to a list, and then give an
example demonstrating the practical distinction between === and eqv
based on that?  I want to see why it's important to distinguish
between comparing mutable data types and comparing immutable data
types.

(Incidently, I think that a suitable word-based synonym for =:= would be "is".)

--
Jonathan "Dataweaver" Lang

Reply via email to