Так что это казалось достаточно простым. Используйте ряд вложенных циклов, чтобы пройти тонну URL-адресов, отсортированных по году / месяцу / дню, и загрузить файлы XML.
Поскольку это мой первый скрипт, я начал с цикла; что-то знакомое на любом языке. Я запустил его, просто печатая сконструированные URL-адреса, и он работал отлично.
Затем я написал код для загрузки контента и сохранения его отдельно, и он отлично работал с примером URL для нескольких тестовых случаев.
Но когда я объединил эти два фрагмента кода, он сломался, программа просто застряла и ничего не сделала.
Поэтому я запустил отладчик и, пройдя через него, застрял в одной строке:
предупреждений :: регистрация :: импорт (/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
$ = Socket :: BEGIN () вызывается из файла `/usr/lib/perl/5.10/Socket.pm 'строка 7
$ = eval {...} вызывается из файла `/usr/lib/perl/5.10/Socket.pm 'строка 7
$ = требуется 'Socket.pm', вызываемый из файла `/usr/lib/perl/5.10/IO/Socket.pm 'строка 12
$ = IO :: Socket :: BEGIN () вызывается из файла `/usr/lib/perl/5.10/Socket.pm 'строка 7
$ = eval {...} вызывается из файла `/usr/lib/perl/5.10/Socket.pm 'строка 7
$ = требуется IO / Socket.pm, вызываемый из файла `/usr/share/perl5/LWP/Simple.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, работает в течение нескольких циклов, а затем снова зависает на некоторое время. Но это все еще проблема. Почему это происходит?