これは私を困惑させました。このコードは別のサーバーでは機能しましたが、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"
orで初期化されていると想定しています"TZ"
。これらは で初期化されるDate_Init
ため、対処する必要があります。
私の大規模なプログラムでのみ失敗しています。上記の" " を抽出getdate()
してスタンドアロンで実行すると、エラーは発生しません。つまり、これに影響を与える地球環境について何かがあります。
これは既知の問題のようですが、理解されていません。「初期化されていない値の日付操作の使用」を Google で検索すると、約 2400 件のヒットがあります。このエラーはMythTVとgrepmailで報告されています。