2008-03-07
「my」を使って「レキシカル変数」を宣言する
「my」を使えばレキシカル変数を宣言することができます。
変数宣言
「変数宣言」というのは「これから変数を使うよ」ということを宣言するものです。新しく使う変数は「my」を使って変数宣言しましょう。
# スカラ変数の宣言 my $num;
スカラ変数のほかに、配列変数、ハッシュ変数を宣言することもできます。
# 配列変数の宣言 my @nums; # ハッシュ変数の宣言 my %score;
変数の初期化
変数宣言と同時に「変数の初期化」を行うことができます。
# スカラ変数の初期化 my $num = 3; # 配列変数の初期化 my @nums = (1, 2, 3); # ハッシュ変数の初期化 my %score = (math => 80, english => 70);
初期化を行わなかった場合は「スカラ変数」の場合は「未定義値」が代入されます。「配列変数」「ハッシュ変数」には「空リスト」が代入されます。
レキシカル変数とは
「my」を使うと「レキシカル変数」を宣言できると書きましたが、レキシカル変数とは、いったいなんでしょうか。レキシカル変数とは、レキシカルなスコープを持つ変数のことです。
レキシカル変数は、スコープの終わりになると、寿命がつきて、メモリから解放されます。
# スコープの開始 { my $num = 2; } # ここでは「$num」を利用できない。
レキシカルなスコープについての詳しい解説は、「Perlのスコープを理解する」をご覧ください。
「strict」モジュールとの連携
「strict」モジュールと「my」による変数宣言を一緒に使うと、変数宣言がない場合に、変数を使おうとした場合に、コンパイルエラーになります。
use strict; my $num = 1; # 変数名が間違っているのでコンパイルエラーになる print $nam;
意図しない変数の利用をすぐに発見できるので、Perlのプログラムでは、必ず「strict」モジュールを使うようにしましょう。
「strict」モジュールについての詳しい解説は「「strict」モジュール - 「文法チェック」を厳しくする」をご覧ください。
「my」と「our」と「local」による変数宣言の違い
Perlの変数宣言には「my」と「our」と「local」の三つがあります。
簡単に違いをいうと「my」は「レキシカル変数」の宣言、「our」は「パッケージ変数」の宣言、「local」は「パッケージ変数を宣言してスコープが終わるまで値を保存」という効果があります。
Perlで変数を宣言するときは「our」や「local」の使用はできる限り避けてください。現代のPerlでは「my」による変数宣言だけで、完全なプログラミングを行うことができます。
「our」についての解説は「「our」でパッケージ変数を宣言する」をご覧ください。
「local」についての解説は「「local」 - パッケージ変数を一時的に退避して復元する」をご覧ください。


