使用if条件返回null的hashref检查

时间:2013-02-19 19:53:56

标签: perl hashref

暂时使用perl但经常会遇到这种情况,Say,$ results是一个hashref,代码如下:

$results->{'Key_1'} = 'Valid_string';
if ( $results->{'Key_1'} ) {  ---> this doesn't return true
   Code to do something .....
}

如果我的问题很明确,有人可以解释,为什么会这样?

2 个答案:

答案 0 :(得分:2)

我猜的唯一原因是$results不是 HASH参考或您的“有效字符串”实际上是一个整数:0

您可以使用以下方法进行测试:

print ref $results;

它应该返回

  

HASH(0X .......)

如果没有,那就有问题了。


更好的测试,以避免任何意外:

if (exists($results->{'Key_1'})) {
    # ...
}

请参阅perldoc perlreftut

perldoc -f exists

  

存在EXPR

     

给定一个指定哈希元素的表达式,如果哈希中的指定元素已被初始化,则返回true,即使相应的值未定义。

答案 1 :(得分:0)

那个字符串不会发生。对于其他字符串来说可能是这样。

$results->{'Key_1'} = '';     # Empty string is false.
$results->{'Key_1'} = '0';    # Zero is false.

或许你根本没有分配字符串

$results->{'Key_1'} = 0;      # Zero is false.
$results->{'Key_1'} = undef;  # Undef is false.

defined将为空字符串返回true并返回零:

if ( defined( $results->{'Key_1'} ) ) {

exists将为空字符串,零和undef返回true:

if ( exists( $results->{'Key_1'} ) ) {