defined EXPR
definedを使うと、変数の値が未定義なので空文字列に見えるか、それとも実際に空文字列が格納されているかを区別することができます。
この関数はEXPRが未定義か定義済みかをチェックし、定義済みの場合は"真"、未定義の場合は"偽"を返します(変数が文字も数値も持たないNULLの状態のときが未定義です)。
宣言されていない変数の値や、いくつかのエラーの返り値は未定義値(undef)と呼ばれます。if文やwhile文などの条件文は未定義値と空文字や 0 などの値を区別せずに"偽"として処理しますが、definedは未定義か定義済みかを判定するので、この両方を区別したいときに有効です。
definedの使い方
# スカラ print 1 if defined $name; # 配列 print 1 if defined(@list);
ハッシュの要素に対して使うと、キーの値が定義されているかどうかを返します。ハッシュのキーを調べるには、existsを使います。
# ハッシュ
print 1 if defined %hash;
print 1 if defined $hash{'NAME'};
関数が定義されているかどうかの判定にも使うことができます。
#サブルーチン
sub function {
defined &$func ? &$func(@_) : ();
}