0

这是我的代码

#!usr/bin/env perl
# Setup includes
use strict;
use XML::RSS;
use LWP::Simple;
# Declare variables for URL to be parsed
my $url2parse;
# Get the command-line argument
my $arg = shift;
# Create new instance of XML::RSS
my $rss = new XML::RSS;
# Get the URL, assign it to url2parse, and then parse the RSS content
$url2parse = get($arg);
die "Could not retrieve $arg" unless $url2parse;
$rss->parse($url2parse);
# Print the channel items
foreach my $item (@{$rss->{'items'}}) {
     next unless defined($item->{'title'}) && defined($item->{'link'});
     print "<li><a href=\"$item->{'link'}\">$item->{'title'}</a><BR>\n";
}

当我输入 %perl myRss.pl http://www.nytimes.com/services/xml/rss/userland/Education.xml时,控制台会运行一段时间并返回 “无法检索http://www.engadget。 com/ rss.xml 在 myRss.pl 第 14 行。” 我的代码哪里出错了?

4

1 回答 1

0

好吧,输出真的说明了一切:在 myRss.pl 第 14 行

die "Could not retrieve $arg" unless $url2parse;

这意味着 LWP::Simple 未能获取您提供的 URL。如果您想知道失败的原因,您可能应该切换到LWP::UserAgent. 这样的事情应该告诉你更多:

use LWP::UserAgent;
sub get {
    my $url = shift;
    my $ua = LWP::UserAgent->new();
    my $res = $ua->get($url);

    die ("Could not retrieve $url: " . $res->status_line) unless($res->is_success);
    return $res->content;
}

只需从您的代码中删除 LWP::Simple,您就可以使用您的“自定义 get()”子例程。

于 2012-04-04T01:50:28.693 回答