しばらくの間perlを使用していますが、これに頻繁に遭遇します。たとえば、$ resultsはhashrefであり、コードは次のようになります。
$results->{'Key_1'} = 'Valid_string';
if ( $results->{'Key_1'} ) { ---> this doesn't return true
Code to do something .....
}
私の質問が明確な場合、誰かが説明できますか、なぜこれが起こるのですか?
私が推測する唯一の理由は、それがHASH 参照$results
ではないか、「有効な文字列」が実際には整数であるということです:0
あなたはそれをテストすることができます:
print ref $results;
返すべき
ハッシュ(0x.......)
そうでない場合は、問題があります。
驚きを避けるために、次のようにテストすることをお勧めします。
if (exists($results->{'Key_1'})) {
# ...
}
EXPRが存在する
ハッシュの要素を指定する式を指定すると、対応する値が未定義であっても、ハッシュの指定された要素が初期化されていれば true を返します。
それはその文字列では起こりません。これは、他の文字列にも当てはまります。
$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'} ) ) {