defined:未定義値かどうかを判別する

Perl で用意されている組み込み関数の一つである defined 関数の使い方です。 defined 関数は引数の値が未定義値(undef)かどうかを判別して真または偽で返します。

(Last modified: )

defined関数の書式と基本的な使い方

defined 関数は次のように定義されています。

defined
defined([EXPR])
引数が未定義値かどうかを判別します。

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

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

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

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

my $var;

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

またサブルーチンに対して defined(&サブルーチン名) を実行するとサブルーチンが定義されているかどうかを判別する事もできます。

サンプルコード

それでは簡単なサンプルを作成します。

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";
}

undef($var);

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

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

次のように実行結果が表示されます。

defined:未定義値かどうかを判別する(1)

変数の値が未定義値かどうかを判別し結果を画面に表示しました。なお最後に undef 関数を使って変数を未定義値に設定しています。詳しい使い方については「undef関数:変数や配列を未定義値に設定する」を参照されてください。

-- --

Perl で用意されている組み込み関数の一つである defined 関数の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。