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

私が推測する唯一の理由は、それがHASH 参照$resultsではないか、「有効な文字列」が実際には整数であるということです:0

あなたはそれをテストすることができます:

print ref $results;

返すべき

ハッシュ(0x.......)

そうでない場合は、問題があります。


驚きを避けるために、次のようにテストすることをお勧めします。

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

見るperldoc perlreftut

そしてperldoc -f exists

EXPRが存在する

ハッシュの要素を指定する式を指定すると、対応する値が未定義であっても、ハッシュの指定された要素が初期化されていれば true を返します。

于 2013-02-19T19:57:48.573 に答える
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'} ) ) {
于 2013-02-19T22:17:11.097 に答える