defined関数

広告

「defined」関数は引数の値が未定義値(undef)かどうかを判別して真又は偽で返します。

引数が未定義値かどうかを判別します。

パラメータ:
  EXPR  対象の値又は関数
戻り値:
  定義済みなら真(true)

1番目の引数には対象となる値を指定します。省略された場合は変数「$_」が使用されます。定義済みかどうかを判別し、定義済みの場合は真(true)を返します。値が未定義値となるのは初期化されていない変数の値や、ファイルの終端を読み込んだ時、システムエラーとなった時の戻り値などの場合があります。

if文などの条件式においては、未定義値(undef)、空文字、数字の0や文字の「0」なども全て偽と判別されますが、「defined」関数を使えば未定義(undef)だけを判別することが出来ます。

具体的には次のように記述します。

my $var;

if (defined($var)){
  print "定義済み¥n";
}else{
  print "未定義値¥n";
}

またサブルーチンに対して「defined(&サブルーチン名)」を実行するとサブルーチンが定義されているかどうかを判別する事も出来ます。使い道が良く分かっていないので、また分かり次第書き直します。

サンプルプログラム

では簡単なプログラムで確認して見ます。

test1-1.pl

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

my $var;

if (defined($var)){
  print "定義済み¥n";
}else{
  print "未定義値¥n";
}

$var = "Test";

if (defined($var)){
  print "定義済み¥n";
}else{
  print "未定義値¥n";
}

$var = "";

if (defined($var)){
  print "定義済み¥n";
}else{
  print "未定義値¥n";
}

上記を「test1-1.pl」の名前で保存します(文字コードはUTF-8です)。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。

defined関数

( Written by Tatsuo Ikura )