【问题标题】:How to concatenate multiple LWP get commands如何连接多个 LWP get 命令
【发布时间】:2012-09-01 08:11:31
【问题描述】:

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

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

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

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

【问题讨论】:

  • 似乎没有按我的预期工作是什么意思?我认为您的第一次尝试没有任何问题
  • @Borodin 对,原来我的问题是外部的;我更新了我的问题以使其有意义。

标签: perl lwp


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    一种可能性:

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

    从右到左看:

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

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

    grep 然后扔掉undefs。

    join最终将检索成功的内容串联起来。

    【讨论】:

      猜你喜欢
      • 2021-04-15
      • 2016-01-05
      • 2014-02-14
      • 1970-01-01
      • 2019-05-12
      • 2022-01-10
      • 1970-01-01
      • 2012-11-20
      • 1970-01-01
      相关资源
      最近更新 更多