Perl Perl_0
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 で、スカラー変数を宣言したとして、その変数に値をセットしていない場合、該当の変数は、「 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
「アンデフ」という言葉の響きは、雄大な「アンデス山脈」を連想させると同時に、トモコDEATH のアルバム「an DEATH」を思い出させます。
トモコDEATH はデジタルハードコアというジャンルなんだそうですが、民族音楽の雰囲気と、どこかしらもの悲しさがある楽曲が割と好きです。
参考情報は以下の書籍を中心に Wikipedia および各 Web サイト。それと詳しい先輩。
参考 :「Randal L. Schwartz, brian d foy, Tom Phoenix 共著 近藤 嘉雪 訳「初めての Perl 第 6 版」(オライリー・ジャパン発行 ISBN978-4-87311-567-2)」
次回 (0x1a) へ続く。
過去記事 RSS
Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)