Это меня озадачило. Этот код работал на другом сервере, но он не работает на Perl v5.8.8 с Date :: Manip , загруженным из CPAN сегодня.
Warning:
Use of uninitialized value in numeric lt (<) at /home/downside/lib/Date/Manip.pm line 3327.
at dailyupdate.pl line 13
main::__ANON__('Use of uninitialized value in numeric lt (<) at
/home/downsid...') called at
/home/downside/lib/Date/Manip.pm line 3327
Date::Manip::Date_SecsSince1970GMT(09, 16, 2008, 00, 21, 22) called at
/home/downside/lib/Date/Manip.pm line 1905
Date::Manip::UnixDate('today', '%Y-%m-%d') called at
TICKER/SYMBOLS/updatesymbols.pm line 122
TICKER::SYMBOLS::updatesymbols::getdate() called at
TICKER/SYMBOLS/updatesymbols.pm line 439
TICKER::SYMBOLS::updatesymbols::updatesymbol('DBI::db=HASH(0x87fcc34)',
'TICKER::SYMBOLS::symbol=HASH(0x8a43540)') called at
TICKER/SYMBOLS/updatesymbols.pm line 565
TICKER::SYMBOLS::updatesymbols::updatesymbols('DBI::db=HASH(0x87fcc34)', 1, 0, -1) called at
dailyupdate.pl line 149
EDGAR::updatesymbols('DBI::db=HASH(0x87fcc34)', 1, 0, -1) called at
dailyupdate.pl line 180
EDGAR::dailyupdate() called at dailyupdate.pl line 193
Код, который не работает, просто:
sub getdate()
{ my $err; ## today
&Date::Manip::Date_Init('TZ=EST5EDT');
my $today = Date::Manip::UnixDate('today','%Y-%m-%d'); ## today's date
####print "Today is ",$today,"\n"; ## ***TEMP***
return($today);
}
Это верно; Date :: Manip не работает для "today"
.
Строка в Date :: Manip , которая не работает:
my($tz)=$Cnf{"ConvTZ"};
$tz=$Cnf{"TZ"} if (! $tz);
$tz=$Zone{"n2o"}{lc($tz)} if ($tz !~ /^[+-]\d{4}$/);
my($tzs)=1;
$tzs=-1 if ($tz<0); ### ERROR OCCURS HERE
Итак Date :: Manip предполагает, что $Cnf
был инициализирован с элементами "ConvTZ"
или "TZ"
. Они инициализируются в Date_Init
, поэтому о них следует позаботиться.
Это сбой только в моей большой программе. Если я просто извлеку "getdate()
" выше
и запустить его в автономном режиме, нет ошибки. Так что есть что-то о
глобальная среда, которая влияет на это.
Кажется, это известная, но не понятая проблема. Если вы ищете Google для
«Использование неинициализированной манипуляции датой стоимости» насчитывает около 2400 обращений.
Об этой ошибке сообщают MythTV и grepmail .