Perl如何检查数组是不是仍然为空?
Posted
技术标签:
【中文标题】Perl如何检查数组是不是仍然为空?【英文标题】:Perl how to check if array is still empty?Perl如何检查数组是否仍然为空? 【发布时间】:2012-09-26 22:50:37 【问题描述】:希望这应该很简单。我初始化一个空数组,执行 grep 并将结果(如果有)放入其中,然后检查它是否为空。像这样:
my @match = ();
@match = grep /$pattern/, @someOtherArray;
if (#match is empty#)
#do something!
这样做的标准方法是什么?
【问题讨论】:
您可以在同一行定义和初始化@match -my @match = grep etc.
【参考方案1】:
您将看到所有这些用于测试数组是否为空的习语。
if (!@match)
if (@match == 0)
if (scalar @match == 0)
在标量上下文中,数组被评估为其包含的元素数。
【讨论】:
别忘了unless ( @match )
Do forget unless (@match)
。 (但这只是,就像,我的看法,伙计)
与这些相反的说法也是真的吗?如果您想控制至少存在一个元素时的行为,我假设它将是 if (@match)
和 if (@match != 0)
但我认为我应该检查【参考方案2】:
如果您使用的是数组引用而不是数组,例如
my $existing_match = data_layer->find('Sale',id => $id);
上面说返回一个数组,然后使用:
if( scalar(@$existing_match) == 0)
【讨论】:
布尔上下文已经解决了这个问题,所以把它全部写出来是多余的。【参考方案3】:我也发现这也有效,但我不确定它是否记录在案:
if ($#match == -1)
【讨论】:
拜托,从来没有人这样做过。 :) 总是if (@match)
或if (not @match)
或if (! @match)
。
@lordadmira if ($#match < -0.5)
怎么样?
换句话说,您的反对意见是否仅认为在变量未明确键入为整数或浮点的语言中测试两个整数的完全相等是危险的? 以上是关于Perl如何检查数组是不是仍然为空?的主要内容,如果未能解决你的问题,请参考以下文章