Perl ハッシュに未定義の値へのキー マッピングが含まれているかどうかを確認するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2124977

質問

Perl ハッシュに特定のキーがあるかどうかを確認する必要がありますが、そのキーは undef 値にマップされます。具体的には、この動機は、使用中にブールフラグがあるかどうかを確認することです。 getopt() ハッシュ参照が渡されます。このサイトとグーグルの両方ですでに検索しましたが、 exists() そして defined() この状況には当てはまらないようです。指定されたキーの値が未定義かどうかを確認するだけで、ハッシュに実際にキーがあるかどうかは確認しません。私がここで RTFM をしている場合は、これを説明しているマニュアルを教えてください。

役に立ちましたか?

解決

存在する()と定義された()は、この状況には適用できないようです。指定されたキーの値が未定義かどうかを確認するだけで、ハッシュに実際にキーがあるかどうかはチェックしません

正しくない。それは確かに何ですか defined() そうですが、 exists() まさにあなたが望むことを行います:

my %hash = (
    key1 => 'value',
    key2 => undef,
);

foreach my $key (qw(key1 key2 key3))
{
    print "\$hash{$key} exists: " . (exists $hash{$key} ? "yes" : "no") . "\n";
    print "\$hash{$key} is defined: " . (defined $hash{$key} ? "yes" : "no") . "\n";
}

生成されるもの:

$hash{key1} exists: yes
$hash{key1} is defined: yes
$hash{key2} exists: yes
$hash{key2} is defined: no
$hash{key3} exists: no
$hash{key3} is defined: no

これら 2 つの関数のドキュメントは、次のコマンドラインから入手できます。 perldoc -f defined そして perldoc -f exists (または、次の場所にあるすべてのメソッドのドキュメントを参照してください。 perldoc perlfunc*)。公式 Web ドキュメントはここにあります。

*特に RTFM について言及しましたが、Perl ドキュメントの場所をご存じないかもしれません。すべての Perldoc の完全なインデックスは次の場所で入手できることも指摘しておきます。 perldoc perl または http://perldoc.perl.org.

scroll top