perl:循环遍历返回数组或undef的函数

时间:2014-06-27 16:11:08

标签: perl

我正在为这个问题寻找合适的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

1 个答案:

答案 0 :(得分:3)

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

在列表上下文中返回undef,它返回一个空列表(return没有参数返回列表上下文中的空列表和标量上下文中的undef)。您只需循环返回值,不需要@{ }

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