0

使用 perl 有一段时间了,但经常遇到这种情况,比如说,$results 是一个 hashref,代码如下:

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

如果我的问题很清楚,谁能解释一下,为什么会这样?

4

2 回答 2

2

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

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

print ref $results;

它应该返回

哈希(0x.......)

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


像这样更好的测试以避免任何意外:

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

perldoc perlreftut

并且perldoc -f exists

存在 EXPR

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

于 2013-02-19T19:57:48.573 回答
0

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'} ) ) {
于 2013-02-19T22:17:11.097 回答