在Perl中,if (%hash)和if (defined %hash)有什么区别?

3
< p >if (%hash)和if (defined %hash)之间的区别是什么?

my %hash ;

if ( %hash) { 

  print "defined "; 
}

if (defined %hash)  { 
  print "defined ";
}
1个回答

22

来自perldoc -f defined:

已弃用在聚合类型(哈希和数组)上使用"defined"。它曾经用于报告是否为该聚合类型分配了内存。这种行为可能会在未来的Perl版本中消失。您应该改用简单的大小测试:

  if (@an_array) { print "has array elements\n" }
  if (%a_hash)   { print "has hash members\n"   }

在5.8.3之前,标量上下文中的绑定哈希存在问题。它们通常会返回0。如果您正在为pre-5.8.3编写代码,请使用if( keys %hash )。http://perldoc.perl.org/perl583delta.html#Core-Enhancements - Schwern

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接