|
|
Perl関数リファレンス その他の関数 |
H.Kamifuji . |
Perlの組み込み関数の中でその他の関数のリファレンスです。 当ページでは、Linux CentOS7 の Gnome で動作テストしています。 |
|
「defined」関数は引数の値が未定義値(undef)かどうかを判別して真又は偽で返します。 defined defined([EXPR])引数が未定義値かどうかを判別します。 パラメータ: EXPR 対象の値又は関数 戻り値: 定義済みなら真(true) 1番目の引数には対象となる値を指定します。省略された場合は変数「$_」が使用されます。定義済みかどうかを判別し、定義済みの場合は真(true)を返します。値が未定義値となるのは初期化されていない変数の値や、ファイルの終端を読み込んだ時、システムエラーとなった時の戻り値などの場合があります。 if文などの条件式においては、未定義値(undef)、空文字、数字の0や文字の「0」なども全て偽と判別されますが、「defined」関数を使えば未定義(undef)だけを判別することが出来ます。 具体的には次のように記述します。 my $var; if (defined($var)){ print "定義済み\n"; }else{ print "未定義値\n"; }またサブルーチンに対して「defined(&サブルーチン名)」を実行するとサブルーチンが定義されているかどうかを判別する事も出来ます。使い道が良く分かっていないので、また分かり次第書き直します。 では簡単なプログラムで確認して見ます。 test1-1.pl サンプルプログラム下記のサンプルを実行してみよう。# 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"; }上記を「test1-1.pl」の名前で保存してから次のように実行して下さい。 ![]() Linux 環境での実行結果は、下記です。シフトJIS で出力されるので nkf -w で UTF-8 に変換しています。 [xxxxxxxx@dddddddddd Other]$ perl test1-1_u.pl | nkf -w 未定義値 定義済み 定義済み [xxxxxxxx@dddddddddd Other]$ |
「undef」関数は引数に指定した変数などを未定義値(undef)に設定します。 undef undef([EXPR])引数に指定した変数、配列、ハッシュ、サブルーチン、型グロブを未定義値に設定します。 パラメータ: EXPR 対象の変数など 戻り値: 未定義値(undef) 1番目の引数には対象を指定します。対象は変数の他に配列、ハッシュ、サブルーチン、型グロブが指定できます。指定された引数を未定義値(undef)に設定し戻り値として未定義値(undef)を返します。引数が省略された場合は単に未定義値(undef)を返します。 具体的には次のように記述します。 my $var = 10; undef($var);引数を省略した場合には、単に未定義値(undef)を返します。サブルーチンの戻り値として未定義値(undef)を返したい場合などに使用します。 では簡単なプログラムで確認して見ます。 test2-1.pl サンプルプログラム下記のサンプルを実行してみよう。# undef関数 # use strict; use warnings; use utf8; binmode STDIN, ':encoding(cp932)'; binmode STDOUT, ':encoding(cp932)'; binmode STDERR, ':encoding(cp932)'; my $var; &check($var); $var = "Test"; &check($var); undef($var); &check($var); sub check{ if (defined($_[0])){ print "定義済み\n"; }else{ print "未定義値\n"; } }上記を「test2-1.pl」の名前で保存してから次のように実行して下さい。 ![]() Linux 環境での実行結果は、下記です。シフトJIS で出力されるので nkf -w で UTF-8 に変換しています。 [xxxxxxxx@dddddddddd Other]$ perl test2-1_u.pl | nkf -w 未定義値 定義済み 未定義値 [xxxxxxxx@dddddddddd Other]$ |
|