如何连接多个LWP get命令

时间:2012-09-01 08:11:31

标签: perl lwp

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

如果我的get个请求中只有一个返回了定义的值,那么我有以下内容:

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

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

2 个答案:

答案 0 :(得分:2)

那是因为你嵌套条件并使它们依赖于之前获得的成功,而不应该这样。

my $result;
if ($content = get $page_one) { $result .= $content }
if ($content = get $page_two) { $result .= $content }
if ($content = get $page_three) { $result .= $content }

答案 1 :(得分:2)

一种可能性:

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

从右到左看一下:

首先,我构建一个地址为三页的数组。

将其移交给map,后者检索返回三个元素数组的每个页面。每个元素都是页面的内容或undef

然后grep会抛弃undef s。

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