Pedro Larroy writes:
> Would it be a good idea to make ==, and other numeric comparators
> polymorphic so they can be used also for string comparisons? Or the
> will is to keep eq, gt and the others. (not very nice emho).
It was decided long ago that the distinction between == and eq is going
to stay. En mi humilde opiniÃn, the idea is not archaic, but quite
modern. Or postmodern Larry would say, though I don't really understand
what that means.
Since scalars are polymorphic, their operations must not be. The
problem is the same as that of using + for string concatenation (which
has been proposed far too many times). A big part of Perl is the
ability to do:
my $a = 43;
$a += 1;
$a ~= " bananas"; # 44 bananas
And the ability to keep the semantics the exact same if you happen to
put quotes around the "43"... or read it in from a file, for instance.
Admittedly, if you use == for everything, you can force string or
numeric comparison this way:
if +$a == +$b {...} # numeric
if ~$a == ~$b {...} # string
But it's been pointed out:
if +(some($big+%nastyÂexpressionÂ)) == +$b {...}
Now it takes three, maybe four re-scans to figure out that it's a
numeric comparison. Kills readability.
Fortunately for the generic programmer there's a generic equality which
returns true when objects are the same type (or almost the same, like an
integer and a string that looks like an integer), and false otherwise.
Larry called it "equal", though "equals" seems much, much better.
if $a equals $b {...}
There's your "polymorphic" equality, if you will. I'd be wary of using
it often, however.
Luke