それで、それは十分に簡単に思えました。一連のネストされたループを使用して、年/月/日でソートされた大量の URL を調べ、XML ファイルをダウンロードします。これは私の最初のスクリプトなので、ループから始めました。どの言語でもおなじみの何か。構築された URL を印刷するだけで実行したところ、完璧に機能しました。次に、コンテンツをダウンロードして個別に保存するコードを書きましたが、複数のテスト ケースでサンプル URL を使用しても完璧に機能しました。しかし、これら 2 つのコードを組み合わせると、プログラムが動かなくなり、何もできなくなりました。したがって、デバッガーを実行しましたが、ステップ実行すると、次の1行でスタックしました。
warnings::register::import(/usr/share/perl/5.10/warnings/register.pm:25):25:vec($warnings::Bits{$k}, $warnings::LAST_BIT, 1) = 0 ;
r を押してサブルーチンから戻ると、機能し、呼び出しスタックを下る途中の別のポイントに進み、しばらくの間、同様のことが何度も発生します。スタック トレース:
$ = warnings::register::import('warnings::register') がファイル `/usr/lib/perl/5.10/Socket.pm' 行 7 から呼び出されました
$ = ファイル `/usr/lib/perl/5.10/Socket.pm' 行 7 から呼び出された Socket::BEGIN()
$ = eval {...} ファイル `/usr/lib/perl/5.10/Socket.pm' 行 7 から呼び出されます
$ = ファイル `/usr/lib/perl/5.10/IO/Socket.pm' 行 12 から呼び出される 'Socket.pm' が必要です
$ = ファイル `/usr/lib/perl/5.10/Socket.pm' 行 7 から呼び出される IO::Socket::BEGIN()
$ = eval {...} ファイル `/usr/lib/perl/5.10/Socket.pm' 行 7 から呼び出されます
$ = ファイル `/usr/share/perl5/LWP/Simple.pm' から呼び出される 'IO/Socket.pm' が必要 158 行目
$ = LWP::Simple::_trivial_http_get('www.aDatabase.com', 80, '/sittings/1987/oct/20.xml') ファイル `/usr/share/perl5/LWP/Simple.pm' から呼び出される136行目
$ = LWP::Simple::_get(' http://www.aDatabase.com/1987/oct/20.xml ') がファイル `xmlfetch.pl' 行 28 から呼び出される
ご覧のとおり、この「get($url)」メソッド内でスタックしていますが、その理由がわかりません。これが私のコードです:
#!/usr/bin/perl
use LWP::Simple;
$urlBase = 'http://www.aDatabase.com/subheading/';
$day=1;
$month=1;
@months=("list of months","jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
$year=1987;
$nullXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<nil-classes type=\"array\"/>\n";
while($year<=2006)
{
$month=1;
while($month<=12)
{
$day=1;
while($day<=31)
{
$newUrl = "$urlBase$year/$months[$month]/$day.xml";
$content = get($newUrl);
if($content ne $nullXML)
{
$filename = "$year-$month-$day.xml";
open(FILE, ">$filename");
print FILE $content;
close(FILE);
}
$day++;
}
$month++;
}
$year++;
}
私はそれが私が知らない小さなものであるとほぼ確信していますが、Googleは何も明らかにしていません.
前もって感謝します、
B.
編集:公式です。この get メソッド内で永遠にハングアップし、いくつかのループを実行してから、しばらくハングします。しかし、それはまだ問題です。なぜこうなった?