Dies hat mich verwirrt. Dieser Code funktionierte auf einem anderen Server, aber Perl v5.8.8 mit Date::Manip, das heute von CPAN geladen wurde, schlägt fehl.Perl: Verwendung von nicht initialisierten Wert in numerischen lt (<) um /Date/Manip.pm
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
Der Code, der einfach Fehler lautet:
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);
}
Das ist richtig; Date::Manip schlägt für "today"
fehl.
Die Linie in Date::Manip, das ist versagt:
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
So wird Date::Manip davon aus, dass $Cnf
mit Elementen "ConvTZ"
oder "TZ"
initialisiert wurde. Diese werden in Date_Init
initialisiert, so dass darauf geachtet werden müsste.
Es ist nur in meinem großen Programm fehlgeschlagen. Wenn ich nur "getdate()
" über extrahiere und es eigenständig laufe, gibt es keinen Fehler. Es gibt also etwas über die globale Umgebung, die sich auf diese auswirkt.
Dies scheint ein bekanntes, aber nicht verstandenes Problem zu sein. Wenn Sie Google nach "Verwendung von nicht initialisiertem Valutadatum manipulieren" suchen, gibt es ungefähr 2400 Treffer. Dieser Fehler wurde mit MythTV und grepmail gemeldet.
Es ist schwer, Ihren Code zu lesen. Wenn Sie sicherstellen, dass Sie den Code einfügen, sodass jede Zeile mit einem Tab oder mindestens 3 Leerzeichen beginnt, wird es besser formatiert. –
Ich glaube, es muss 4 Räume sein. ("Fünf ist richtig.") –