アプリ版:「スタンプのみでお礼する」機能のリリースについて

関数「exists」と「defined」の違いが分かりません。

「exists」はハッシュにしか使えないため「defined」
より特殊な関数なのでしょうが。

$a{$i} = 0 unless defined $a{$i};
$a{$i} = 0 unless exists $a{$i};

↑の二つの文は等価ですよね?

A 回答 (2件)

キーが存在するがその値が未定義、という場合があるので等価ではない。



---------------------------------------------
my %a = ("x"=>undef);

if ( defined($a{"x"}) ) {
print qq(\$a{"x"} is defined\n);
}
else{
print qq(\$a{"x"} is not defined\n);
}
if ( exists($a{"x"}) ) {
print qq(\$a{"x"} exists\n);
}
else{
print qq(\$a{"x"} does not exists\n);
}
    • good
    • 0
この回答へのお礼

非常に分かりやすい例をありがとうございました。

お礼日時:2008/01/16 01:20

先に回答されているように等しくありません。


exists は $hash{'key'} の key 自体が存在しているか調べられます。

exists の結果が偽なら defined も偽になりますが、
defined が偽でも、key 自体が存在していれば exists は真を返します。
    • good
    • 0
この回答へのお礼

回答1への補足、ありがとうございました。

お礼日時:2008/01/16 01:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!