in reply to (tye)Re3: eq or == with references
in thread eq or == with references

Numbers are by definition objects which we can add, subtract, increment, etc. I recall from thirty years ago that some guy named Peano generated the number system using these operations according to his Peano's Postulate.

That which cannot be added, incremented, etc. is not a number. A reference cannot be added, incremented, etc. Therefore a reference is not a number. The numeric comparison operator '==' is for comparing numbers. A reference is not a number. Therefore Larry and company should not permit the use of '==' to compare references, only numbers.

I also do not understand the statement that using '==' is more efficient when comparing references than is 'eq'. It seems to me that what we have here is an "amplifier that goes up to 11" type of argument (for those who have seen the film Spinal Tap.) Larry could simply take the algorithm that he uses for the '==' operator and use it for the 'eq' operator when comparing references (just as that amplifier maker could have taken whatever loudness he called 10 and instead called it 11.)

"Working on a sex farm. Poking your hay."—David St. Hubbins and Nigel Tufnel, "Sex Farm," Smell the Glove.

Replies are listed 'Best First'.
(tye)Re4: eq or == with references
by tye (Sage) on Jul 09, 2001 at 19:51 UTC

    "Numbers are not strings, therefore you shouldn't use eq to compare references." You can't append references together. You can't take substrings of references. etc.

    I also do not understand the statement that using '==' is more efficient when comparing references than is 'eq'. [...] Larry could simply take the algorithm that he uses for the '==' operator and use it for the 'eq' operator when comparing references

    Yes, you don't understand what is going on. The == operator has nothing special about it in regard to references. The == operator just requests the numeric value of its operands (or "evaluates them in a numeric context") then compares the results. This is what it does for all scalars whether they are references or not.

    The eq operator requests the string value of its operands and then compares them. References return a descriptive string that also includes their "pointer" value in hex. To make the eq operator on references not require the construction of this descriptive string would require that eq have special code added to detect references and perform a different operation. Such added code probably defeats the point of trying to make eq on references more efficient.

            - tye (but my friends call me "Tye")
      Okay. I guess that I had to learn to think more Perlishly.

      When we use the '==' operator on references that does not mean, as it might in a strongly typed language, that references are therefore numbers.

      Just as the distinction between references and pointers is a key element of Perl, the Janus-faced nature of Perl thingies which change according to their calling context is another key element of Perl. Regardless of the thingie, the calling context does not change the true nature of the thingie. The true nature of a reference is emphatically not a number even if the reference is called in numeric context.

      The value of a reference in numeric context is simply a name consisting purely of numbers, as it is written: "My name is a number...", Jagger-Richard from the song "2000 Man" on Their Satanic Majesties Request in 1967.