Subject: | sum, overload and bigint |
Date: | Thu, 2 Jul 2009 12:30:54 +0300 |
To: | bug-Scalar-List-Utils [...] rt.cpan.org |
From: | zgrim <zzgrim [...] gmail.com> |
Sorry if this has been reported/addressed before, i don't find traces of it.
In short, sum() (both XS and PP) ignores possible (lexical) overloadings,
which causes problems under, for example, the bigint pragma.
IMHO, this should be addressed by either issuing a warning in the documentation,
for people not to have the wrong expectations, or by following the overlo(?:a|r)ds.
( checking $^H ? )
Example:
-----
#! /usr/bin/perl
use warnings 'FATAL' => 'all';
use strict;
use 5.010;
use List::Util ();
my @x = qw(
12345678101234567810123456781012345678101234567832
18765432101876543210187654321018765432101876543226
14321678105432167810543216781054321678105432167874
);
{
use bigint;
my $sum = sub { my $s = 0; $s += $_ for @_; $s };
say q{(bigint ON) sum @x = }, $sum->( @x );
say q{(bigint ON) List::Util::sum @x = }, List::Util::sum( @x );
}
{
no bigint;
my $sum = sub { my $s = 0; $s += $_ for @_; $s };
say q{(bigint OFF) sum @x = }, $sum->( @x );
say q{(bigint OFF) List::Util::sum @x = }, List::Util::sum( @x );
}
__END__
(bigint ON) sum @x = 45432788308543278830854327883085432788308543278932
(bigint ON) List::Util::sum @x = 4.54327883085433e+49
(bigint OFF) sum @x = 4.54327883085433e+49
(bigint OFF) List::Util::sum @x = 4.54327883085433e+49
-----