perl - geturl我的第一个perl脚本: 在循环中,使用"获取( $url )"方法?

  显示原文与译文双语对照的内容

所以看起来很简单。 使用一系列嵌套循环来执行由 year/month/day 排序的大量url并下载XML文件。 因为这是第一个脚本,我从循环开始;在任何语言中熟悉的东西。 我运行它只是打印构造的url,它工作完美。 然后编写了代码以下载内容并单独保存它,并且在多个测试用例中完美地保存了一个 URL 。 但是当我组合这两个代码时,它破坏了,程序刚刚被卡住了,没有什么。 因此我运行调试器,当我单步执行它时,它就会出现在这一行中:

warnings::register::import(/usr/share/perl/5.10/warnings/register.pm:25):25:vec($warnings::Bits{$k}, $warnings::LAST_BIT, 1 ) = 0 ;

如果我只是按 R 从子程序返回,它就会继续到另一个时间点上。 堆栈跟踪:

$ = 警告:: 注册:: 导入('警告:: 注册来自文件 `/usr/lib/perl/5.10/Socket.pm'第 7行的') 调用

$ = Socket::BEGIN() 从文件 `/usr/lib/perl/5.10/Socket.pm'行 7调用

$ = 从文件 `/usr/lib/perl/5.10/Socket.pm'第 7行调用 {...} 调用

$ = 要求从文件 `/usr/lib/perl/5.10/IO/Socket.pm'行 12调用'socket.pm'

$ = io:: socket: 从文件 `/usr/lib/perl/5.10/Socket.pm'行 7调用的开始( )

$ = 从文件 `/usr/lib/perl/5.10/Socket.pm'第 7行调用 {...} 调用

$ = 要求从文件 `/usr/share/perl5/LWP/Simple.pm'行 158调用'io/套接字。pm'

$ = LWP::Simple::_trivial_http_get('www.aDatabase.com', 80,从文件 `/usr/share/perl5/LWP/Simple.pm'行 136调用'/sittings/1987/oct/20.xml')

$/lwp: 从文件 `xmlfetch 。pl'调用的simple:: _get ('http://www.aDatabase.com/1987/oct/20.xml')

你可以看到它在这个"获取( $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方法中永久挂起,运行几个循环,然后再挂一会儿。 但还是个问题。 为什么会发生这种事?

时间: 原作者:

由于是一个 404 ( 而且不是可以从程序生成的东西( 没有'副标题,所以我假设这不是你正在使用的真正链接,这使得我们很难测试。 作为一般规则,请使用 example.com 而不是创建主机名,这就是为什么它保留的原因。

真应该


use strict;


use warnings;



在你的代码中- 这将有助于突出显示可以能有( 如果是这样的话,我会很惊讶,但是有几个可以能的部分代码会乱发你的$urlBase 或者它的他的。)的任何范围问题。 我认为应该足够改变变量声明( 以及 $newUrl, $content 和 $filename)',以使代码严格。

如果使用了严格和警告,你可以提醒你将使用每个循环,因这里可以在浏览器中使用 嗅探器 ( 例如 ) 。

原作者:
...