blog20100901

2013/08/20 - プログラミング言語 Perl にまつわる etc. - Perl monger
参考 : perldoc, perldoc.jp, search.cpan.org, perldoc.perl.org ...
「 初めての Perl 第 6 版 」(オライリー・ジャパン発行 ISBN978-4-87311-567-2) 」
「 続・初めての Perl 改訂版 」(オライリー・ジャパン発行 ISBN4-87311-305-9) 」
「 Effective Perl 第 2 版 」(翔泳社発行 ISBN978-4-7981-3981-4) 」 ... etc,.

Perl Perl_0

Perl 「 未定義値 」undef (0x19)

Perl 「 未定義値 」undef (0x19)

Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x19 回。

Perl の未定義値 undef について。





未定義値 undef




僕は「 アンデフ 」と読んでいます。

Perl で、スカラー変数を宣言したとして、その変数に値をセットしていない場合、該当の変数は、「 undef 」と呼ばれる特別な値を持ちます。

「 undef 」は、Undefined value (未定義値) を意味します。

他の言語では、未定義値を「 NULL (ヌル または ナル) 」と表現する場合もあるそうです。

電脳コイル 「 ヌル・キャリアー 」で有名な ヌル ですが、「 Null 」はドイツ語で数値 0 を、ラテン語で「無」を意味するそうです。

Perl に ヌル は存在せず、undef がその役割を担います。

「 undef 」は無害な値ですが、それは空文字でもあり、数値の 0 でもあり、そのどちらでもありません。ということです。


$n = 1;
$sum += $n; # $sum の値 undef が文脈上数値 0 として扱われる

print "\$sum : $sum\n"; # $sum は 0 + 1 で 1 になる

$s = "Hello";
$str .= $s; # $str の値 undef が文脈上空文字として扱われる

print "\$str : $str\n"; # $str は Hello になる



通常 undef は空文字や数値 0 の様に扱われ、それは実際上特に問題はないそうです。

しかしながら、警告をオン (warnings プラグマ等) にしている場合は、バグの温床になりかねないとして警告メッセージが表示される場合があります。

次の例は、変数 $str に対して意図的に undef を代入しています。


use warnings;

$str = undef;
prtin "\$str : $str;


これを実行すると、print 文で未定義値を表示しようとしていることを警告するメッセージが表示されます。

Use of uninitialized value in concatenation (.) or string at yourfile line 4.
$str :


(使用している 初期化されていない 連結された値 (.) または 文字列の ファイル名 の 4 行目で.)


警告メッセージはあくまで警告に過ぎないので、4 行目の print 文は実行されています。

初期化されていない連結された値や文字列」とは、未定義値 undef を指しています。

ちなみに僕は、はじめのはじめ頃、変数に undef の値を代入してみたくなったので undef を "" (ダブルクォート) で囲っていました。未定義値とはいえ、それは undef という文字列だと思ったからです。

しかしながら、未定義値を期待した動作を得られませんでした。'' (シングルクォート) で囲んでみても無駄でした。


$str = "undef";


undef は文字列ではなく、未定義値。つまり、undef でしかなかったわけです。


$str = undef; # 正しい ? undef の代入方法

undef $str; # または undef の引数に変数 $str


ここでの undef は文字列 undef ではなく演算子 undef です。この演算子は変数 $str に未定義値 undef を代入します。



0x19-> 0x1a へ



「アンデフ」という言葉の響きは、雄大な「アンデス山脈」を連想させると同時に、トモコDEATH のアルバム「an DEATH」を思い出させます。

トモコDEATH はデジタルハードコアというジャンルなんだそうですが、民族音楽の雰囲気と、どこかしらもの悲しさがある楽曲が割と好きです。

参考情報は以下の書籍を中心に Wikipedia および各 Web サイト。それと詳しい先輩。

参考 :「Randal L. Schwartz, brian d foy, Tom Phoenix 共著 近藤 嘉雪 訳「初めての Perl 第 6 版」(オライリー・ジャパン発行 ISBN978-4-87311-567-2)」

次回 (0x1a) へ続く。

過去記事 RSS












同じカテゴリー(Perl)の記事
 Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228) (2023-10-11 23:49)
 Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227) (2023-05-26 15:41)
 Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226) (2023-05-19 17:05)
 Perl mp2 翻訳 テンプレートシステムの選択 (d225) (2022-08-15 22:23)
 Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224) (2022-06-15 20:43)
 Perl mp2 翻訳 チュートリアル (d223) (2022-06-15 20:42)

Llama
リャマ
TI-DA
てぃーだブログ
プロフィール
セラ (perlackline)
セラ (perlackline)
QRコード
QRCODE
オーナーへメッセージ

PAGE TOP ▲