Use of uninitialized value in numeric lt (<) at /Date/

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View

This has me puzzled. This code worked on another server, but it's
failing on perl v5.8.8, with Date::Manip loaded from CPAN today.

Use of uninitialized value in numeric lt (<) at /home/downside/lib/Date/
line 3327.

  at line 13
         main::__ANON__('Use of uninitialized value in numeric lt (<) at
/home/downsid...') called at

/home/downside/lib/Date/ line 3327
         Date::Manip::Date_SecsSince1970GMT(09, 16, 2008, 00, 21, 22) called at
/home/downside/lib/Date/ line 1905
         Date::Manip::UnixDate('today', '%Y-%m-%d') called at
         TICKER::SYMBOLS::updatesymbols::getdate() called at

'TICKER::SYMBOLS::symbol=HASH(0x8a43540)') called at

TICKER::SYMBOLS::updatesymbols::updatesymbols('DBI::db=HASH(0x87fcc34)', 1, 0,
-1) called at line 149
         EDGAR::updatesymbols('DBI::db=HASH(0x87fcc34)', 1, 0, -1) called at line 180
         EDGAR::dailyupdate() called at line 193

The code that's failing is simply

sub getdate()
{    my $err;                ## today
    my $today = Date::Manip::UnixDate('today','%Y-%m-%d'); ## today's date
    ####print "Today is ",$today,"\n";        ## ***TEMP***

That's right; Date::Manip is failing for "today".

The line in Date::Manip that is failing is

   $tz=$Cnf  if (! $tz);
   $tz=$Zone  if ($tz !~ /^[+-]\d$/);

   $tzs=-1 if ($tz<0); ### ERROR OCCURS HERE

So Date::Manip is assuming that $Cnf has been initialized with elements "ConvTZ"
or "TZ".  Those are initialized in Date_Init, so that should have been
taken care of.

It's only failing in my large program.  If I just extract "getdate()" above
and run it standalone, there's no error.  So there's something about the
global environment that affects this.

This seems to be a known, but un-understood problem.  If you search Google for
"Use of uninitialized value  date manip" there are about 2400 hits.
This error has been reported with MythTV
(" ")
and grepmail ("").

                John Nagle

Re: Use of uninitialized value in numeric lt (<) at /Date/

Quoted text here. Click to load it

It's just a warning - not an error in itself. But if it's leading to
incorrect results, then there's probably something not right :-)

Quoted text here. Click to load it

I think $tz must be *initialized* by the time

$tz=3D$Zone  if ($tz !~ /^[+-]\d$/);

gets run. If it were not initialized at that stage you'd get a warning
along the lines of "Use of uninitialized value $tz in pattern match
(m//) at line 3324. That being so, it must be the '$tz =
$Zone' that's assigning undef to $tz - since there's
no other way that an initialized $tz could become uninitialized (that
I can think of, anyway).

Probably wouldn't hurt to hack in some print() statements just to see
what $tz contains at various stages - and also to check what
$Zone contains. I don't know much about Date::Manip,
but my hunch is that it's the contents of $Zone that's
causing the problem.


Site Timeline