暂时使用perl但经常会遇到这种情况,Say,$ results是一个hashref,代码如下:
$results->{'Key_1'} = 'Valid_string';
if ( $results->{'Key_1'} ) { ---> this doesn't return true
Code to do something .....
}
如果我的问题很明确,有人可以解释,为什么会这样?
答案 0 :(得分:2)
我猜的唯一原因是$results
不是 HASH参考或您的“有效字符串”实际上是一个整数:0
您可以使用以下方法进行测试:
print ref $results;
它应该返回
HASH(0X .......)
如果没有,那就有问题了。
更好的测试,以避免任何意外:
if (exists($results->{'Key_1'})) {
# ...
}
存在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'} ) ) {