【问题标题】:perl: loop over function that returns array or undefperl:循环返回数组或undef的函数
【发布时间】:2014-06-27 16:11:07
【问题描述】:

我正在为这个问题寻找合适的 perl-ism。我可以解决它,但只需要问...

我正在使用 HTML::TreeBuilder 并且正在使用 look_down 方法。这将根据上下文返回一个数组或标量,如果没有找到匹配的标签,则返回 undef。很酷。

我想做以下事情:

foreach my $tag ( @{ $head->look_down('_tag', 'link') } ) {
    ...
}

但如果没有link 标记,该函数将返回undef 并生成错误Can't use an undefined value as an ARRAY reference at myCGI.cgi line ###。所以我尝试了这个修改:

foreach my $tag ( @{ $head->look_down('_tag', 'link') || [] } ) {
    ...
}

我的想法是,如果该方法返回undef,那么它将变成一个空数组。这在没有 link 标签时有效。但是,如果至少有一个预期标签,则会出现错误:Not an ARRAY reference at myCGI.cgi line ###

我是否需要硬着头皮将方法调用从循环中中断并在进入循环之前检查undef

【问题讨论】:

    标签: perl


    【解决方案1】:

    “返回一个数组”有时在文档中提到但不正确; perl 子例程总是返回列表(尽管在标量上下文中它将是一个只有一个元素的列表)。

    它确实在列表上下文中返回 undef,它返回一个空列表(return 不带参数在列表上下文中返回一个空列表,在标量上下文中返回 undef)。您可以直接遍历返回的值而不需要 @{ }

    foreach my $tag ( $head->look_down('_tag', 'link') ) {
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 2015-03-28
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 1970-01-01
      • 2014-04-10
      相关资源
      最近更新 更多