使用 perl 有一段时间了,但经常遇到这种情况,比如说,$results 是一个 hashref,代码如下:
$results->{'Key_1'} = 'Valid_string';
if ( $results->{'Key_1'} ) { ---> this doesn't return true
Code to do something .....
}
如果我的问题很清楚,谁能解释一下,为什么会这样?
我猜的唯一原因是这$results
不是HASH 引用,或者您的“有效字符串”实际上是一个整数:0
您可以使用以下方法对其进行测试:
print ref $results;
它应该返回
哈希(0x.......)
如果没有,那就有问题了。
像这样更好的测试以避免任何意外:
if (exists($results->{'Key_1'})) {
# ...
}
存在 EXPR
给定一个指定散列元素的表达式,如果散列中的指定元素曾经被初始化,则返回 true,即使相应的值未定义。
That's not going to happen for that string. That could be true for other strings.
$results->{'Key_1'} = ''; # Empty string is false.
$results->{'Key_1'} = '0'; # Zero is false.
Or maybe you didn't assign a string at all
$results->{'Key_1'} = 0; # Zero is false.
$results->{'Key_1'} = undef; # Undef is false.
defined
will return true for the empty string and zero:
if ( defined( $results->{'Key_1'} ) ) {
exists
will return true for the empty string, zero and undef:
if ( exists( $results->{'Key_1'} ) ) {