所以这似乎很容易。使用一系列嵌套循环浏览大量按年/月/日排序的 URL 并下载 XML 文件。因为这是我的第一个脚本,所以我从循环开始;任何语言都熟悉的东西。我运行它只是打印构造的 URL,它运行良好。然后我编写了代码来下载内容并单独保存,并且在多个测试用例上使用示例 URL 也能完美运行。但是当我把这两段代码结合起来时,它就坏了,程序卡住了,什么也没做。因此,我运行了调试器,当我单步调试它时,它卡在了这一行:
警告::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 行调用
$ = Socket::BEGIN() 从文件 `/usr/lib/perl/5.10/Socket.pm' 第 7 行调用
$ = eval {...} 从文件 `/usr/lib/perl/5.10/Socket.pm' 第 7 行调用
$ = 需要从文件 `/usr/lib/perl/5.10/IO/Socket.pm' 第 12 行调用的 'Socket.pm'
$ = IO::Socket::BEGIN() 从文件 `/usr/lib/perl/5.10/Socket.pm' 第 7 行调用
$ = eval {...} 从文件 `/usr/lib/perl/5.10/Socket.pm' 第 7 行调用
$ = 需要从文件“/usr/share/perl5/LWP/Simple.pm”第 158 行调用的“IO/Socket.pm”
$ = 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++;
}
我几乎肯定这是我不知道的微小的东西,但谷歌没有发现任何东西。
提前致谢,
B.
编辑:这是官方的,它只是在这个 get 方法中永远挂起,运行几个循环然后再次挂起一段时间。但它仍然是一个问题。为什么会这样?