1

我正在使用 LWP 从三个不同的网页(动态定义)获取 html 并将其分配给一个 scalar $content。有时我搜索的一个或多个页面将不存在,因此get有时会返回 undef。我应该如何处理这个,这样$content将包括所有成功的 get 命令?

get如果我的请求中只有一个返回了定义的值,我有以下工作:

unless ($content = get $page_one)
{
   unless ($content = get $page_two)
   {
      unless ($content = get $page_three)
      {
         $content = "";
      }
   }
}

但显然,如果不止一页要返回一个定义的值,它就不会获得所有的内容。

4

2 回答 2

2

那是因为您嵌套了条件并使它们依赖于先前获取的成功,而它们不应该这样做。

my $result;
if ($content = get $page_one) { $result .= $content }
if ($content = get $page_two) { $result .= $content }
if ($content = get $page_three) { $result .= $content }
于 2012-09-01T09:11:28.087 回答
2

一种可能:

$content = join '', grep { $_ } map { get($_) } ($page_one, $page_two, $page_three);

从右到左看:

首先,我构造了一个包含三个页面地址的数组。

这将移交给map它检索每个返回三个元素的数组的页面。每个元素要么是页面的内容,要么是undef.

然后grep扔掉undefs。

join最后连接已成功检索的内容。

于 2012-09-01T09:13:53.187 回答