次のコードを使用して、ハッシュが空であるかどうかを確認します。より良い方法があり、これは安全に使用できますか?perlでハッシュが空であるかどうかをチェックする方法
if (!keys %hash) { print "Empty";}
次のコードを使用して、ハッシュが空であるかどうかを確認します。より良い方法があり、これは安全に使用できますか?perlでハッシュが空であるかどうかをチェックする方法
if (!keys %hash) { print "Empty";}
if (%hash)
だけで正常に動作します。 perldoc perldataから
:
あなたはスカラーコンテキストでハッシュを評価する場合は、ハッシュ が空の場合、それはfalseを返します。キーと値のペアがある場合はtrueを返します。 more 正確には、返される値は、使用されたバケットの数が であり、割り当てられたバケットの数が のスラッシュで区切られた文字列です。
'keys%hash'よりもずっと遅いようです。 – choroba
は常にfalseを返すようにスカラコンテキストで結ばれたハッシュを引き起こしa bugがあった(例えば「3/6」)もちろん、NOT falseになりますこれは、> 0のキーのために使用されています。バグはfixed in 5.8.5でした。下位互換性に懸念があるなら、遠くまで私はif(!keys %hash)
に固執します。それ以外の場合はif(!%hash)
を使用してください。
"Better"は主観的な用語です。しかし、わかりやすいコードは「より良い」と表現することができます。この理由から私は!keys %hash
が良いと結論しています。なぜなら、誰もがperlコードを書いているので、このコードが何をしているのか知っているし、動作するからです。 !%hash
は、実際に動作するかどうか、または動作するかどうかを確認するために最低限必要なものです。スカラーコンテキストでの配列の振る舞いはよく知られておりよく使われるが、スカラーコンテキストでのハッシュの戻り値はむしろ混乱し、よく使われる理由がある。
また、!keys %hash
は保存される。
いいえ、ハッシュが空であるかどうかを確認する方法はありません。
あなたの質問に答えられたと感じる場合は、その左側のチェックマークをクリックして回答を受け入れる必要があります。 – TLP