如何在perl中检查哈希是否为空

Kir*_*nta 48 perl hash

我使用以下代码来检查哈希是否为空.有更好的方法,这是否安全使用?

if (!keys %hash) { print "Empty";} 
Run Code Online (Sandbox Code Playgroud)

TLP*_*TLP 87

if (%hash)
Run Code Online (Sandbox Code Playgroud)

会工作得很好.

来自perldoc perldata:

如果在标量上下文中计算哈希值,则在哈希值为空时返回false.如果有任何键/值对,则返回true; 更准确地说,返回的值是一个字符串,由使用的桶数和分配的桶数组成,用斜杠分隔.

  • 它似乎比`keys%hash`慢得多. (2认同)

Sch*_*ern 24

一个错误导致标量上下文中的绑定哈希始终返回false.该错误已在5.8.5修复.如果你担心后面的兼容性,我会坚持if( !keys %hash ).否则if( !%hash )按照他人的建议使用.


DVK*_*DVK 20

更简单:

if (!%hash) { 
    print "Empty";
} 
Run Code Online (Sandbox Code Playgroud)

!强加标量上下文,并在标量上下文中计算哈希返回:

  • false 如果有零键(文档中没有定义,但实验上返回 0

  • 一个字符串,表示有多少使用/分配的桶用于> 0键,这当然不是假的(例如"3/6")