1. Perl
  2. 標準関数
  3. here

undef関数 - 未定義値

undef関数を使えば、未定義値を設定することができます。あるいは、引数に指定した変数の値を未定義にします。

undef
undef(変数)

未定義値の設定は次のように行います。変数「$name」の値が未定義になります。

$name = "Kimoto";
$name = undef;

また次のようにundef関数の引数に変数を渡しても、変数の値を未定義にすることができます。

$name = "Kimoto";
undef $name;

配列やハッシュについてもundef関数を利用することができます。

@names = undef;
undef @names;

%scores = undef;
undef %score;

未定義値の判定

未定義値かどうかを判定するためにはdefined関数を使用することができます。定義されている場合は真を、未定義の場合は偽を返します。

if (defined $name) {
  ...
}

値が未定義だった場合を処理するのにunlessを使って書く方法もお勧めです。

unless (defined $name) {
  # 未定義だった場合の処理
}

未定義値との比較

undefは文字列として比較された場合は「空文字」として、数値として比較された場合は「0」として扱われます。

undef == 0
undef eq ""

warningsモジュールを使えば、このような場合に警告を発してくれて、未然にバグを防げるので、必ず宣言するようにしましょう。

use warnings;

undefを使ったメモリ解放

undefを代入すればメモリは解放されます。

けれども、Perlでは、レキシカル変数を使えば、スコープの終わりで自動的にメモリ解放が行われるので、メモリ解放のためにundefを使う機会はまずないでしょう。

{
  my $num = 5;
}
# スコープの終わりで「$num」のメモリは解放される

ただし、スコープが終わっても、クロージャーの場合などで、メモリが解放されない場合があります。このような場合には、明示的にundefを使ってメモリ解放を行うことができます。

クロージャについては以下の記事を参考にしてください。

サンプル

実行して試せるundef関数のサンプルです。

use strict;
use warnings;

# 変数に未定義値を設定
my $name = "Kimoto";
$name = undef;

if (defined $name) {
  print "Defined";
}
else {
  print "Undef";
}

業務に役立つPerl

Perlテキスト処理のエッセンス

PerlでポータブルなLinuxファイル管理入門

ITエンジニアの求人情報など

 ITエンジニアの求人情報・Webサービス・ソフトウェア・スクールなどの情報。

システム開発のお問い合わせ