[lug] Perl and large numbers on (K)ubuntu

David L. Anselmi anselmi at anselmi.us
Mon Sep 26 19:30:59 MDT 2011


Gary Hodges wrote:
> #!/usr/bin/perl
> use Date::Manip;
> my $secs = 2147483647;  # Increment by one to see the error
> my $time =&DateCalc("Jan 1, 1900  00:00:00","+ $secs");
> print "$secs $time\n";  # $time is in yyyymmddhh:mn:ss format
>
> # My output (second line is w/secs incremented by one):
> # 2147483647 1968012003:14:07
> # 2147483648 1831121320:45:56

So Date::Manip is treating your unsigned, 32 bit int as signed.

What will happen if you convert the date to seconds, add your seconds, and then convert back to a date?

Also, "use bigint" might help.  Or it might not:

> Here is the output of "perl -V".

>       use64bitint=undef, use64bitall=undef, uselongdouble=undef

My use64bitint=defined and your code works fine for me (on AMD64 and x86).

You could also try Date::Calc and see how it behaves.

Dave



More information about the LUG mailing list