如何检查一个散列在Perl中是否为空
我使用下面的代码来检查散列是否为空。 有没有更好的方法,这是安全的使用?
if (!keys %hash) { print "Empty";}
if (%hash)
将工作得很好。
来自perldoc perldata :
如果您在标量上下文中计算散列值,则散列值为空时返回false。 如果有任何键/值对,则返回true; 更确切地说,返回的值是一个string,由使用的桶数和分配的桶数组成,用斜杠分隔。
有一个错误导致标量环境中的哈希值总是返回false。 该错误在5.8.5中修复 。 如果你担心向后兼容性,我会坚持if( !keys %hash )
。 否则,按照其他人的build议使用if( !%hash )
。
更简单:
if (!%hash) { print "Empty"; }
! 施加标量上下文,并且在标量上下文中评估哈希返回:
-
如果零键(在文档中没有定义,但实验返回
0
则为false
-
一个string,表示有多less使用/分配的桶被用于> 0键,当然这不会是错误的(例如“3/6”)
“更好”是一个主观的术语。 不过,我认为那些比较容易理解的代码可以被描述为“更好”。 由于这个原因,我得出这样的结论!keys %hash
是更好的,因为每个人写Perl代码将知道这个代码是什么,它的工作原理。 !%hash
是至less我不得不查找,以确保它是否真的起作用或只看起来像它会工作。 (原因是标量上下文中的散列的返回值相当混乱,而标量上下文中的数组行为是众所周知的并且经常使用)。
另外, !keys %hash
是保存的。
所以不,没有更好或更省钱的方法来检查一个散列是否为空。