0

私は常に if ステートメントで exists と defined を使用しています

if (exists($a->{b}) and defined($a->{b})

これらの両方を同時に行うサブルーチンはありますか?

更新:
あまり良いサンプル コードを提供していないようです。より良い質問と一致する回答については、checking-for-existence-of-hash-key-creates-key を確認してください。

4

3 に答える 3

6

それは同じことです

if (defined($a->{b}))

コメントでの返信についてはdefined、キーをインスタンス化していません。

>perl -E"if (exists($a->{b}) and defined($a->{b})) { }  say 0+keys(%$a);"
0

>perl -E"if (defined($a->{b})) { }  say 0+keys(%$a);"
0

->、一方、通常どおり自動活性化します。

>perl -E"if (defined($a->{b})) { }  say $a || 0;"
HASH(0x3fbd8c)

しかし、それexistsもそうです。

>perl -E"if (exists($a->{b}) and defined($a->{b})) { }  say $a || 0;"
HASH(0x81bd7c)

自動有効化を回避しようとしている場合は、次を使用します

>perl -E"if ($a && defined($a->{b})) { }  say $a || 0;"
0

また

>perl -E"no autovivification; if (defined($a->{b})) { }  say $a || 0;"
0
于 2012-10-29T20:56:41.017 に答える
2

defined(...)が true の場合にのみ true になる可能性があるexists(...)ため、質問に対する答えは、サブルーチンが呼び出されるということdefinedです。

于 2012-10-29T20:56:51.757 に答える
1
  • exists()キーが存在するかどうかをチェックします (値が undef であっても)
  • defined()は、値が定義されているかどうかをチェックします

キーが存在するかどうかのみを確認したい場合 (未定義であっても)、exists()を使用します。

これは、それを非常にうまく説明する関連する質問です:存在と定義の違いは何ですか?

于 2012-10-29T21:06:48.307 に答える