- Perl ›
- 変数
Perlの変数
Perlの変数についての解説です。変数宣言と変数の種類について解説します。
変数宣言
Perlの変数宣言について解説します。
「my」による「レキシカル変数」の宣言
「my」を使って「レキシカル変数」を宣言することができます。
# スカラ変数の宣言 my $num; # 配列変数の宣言 my @nums; # ハッシュ変数の宣言 my %score;
「my」を使った「レキシカル変数の宣言」の詳しい解説については以下の記事をご覧ください。
「our」による「パッケージ変数」の宣言
「our」を使って「パッケージ変数」を宣言することができます。
パッケージ変数を宣言するにはourを使用します。
# スカラ変数の宣言 our $NUM; # 配列変数の宣言 our @NUMS; # ハッシュ変数の宣言 our %SCORE;
「our」を使った「パッケージ変数の宣言」については以下の記事をご覧ください。
「local」による値の保存と復元
「local」を使うと、パッケージ変数を一時的に保存して、スコープの終わりで、復元することができます。
our $NUM = 5; { local $NUM = 3; } # ここで「$NUM」は「元の値」である「5」に戻る
「local」による「値の保存と復元」については以下の記事をご覧ください。
- localについては「local - パッケージ変数を一時的に退避して復元」で解説しています。
Perlの変数型
Perlにはみっつの「変数型」である「スカラ変数」「配列変数」「ハッシュ変数」があります。C言語やJavaのように「int型」「double型」のように数値の型を示しているのではないので注意してください。
「スカラ変数」 - ひとつの値を格納
「スカラ変数」は、変数の中にたった一つの何らかの値を、含むことができる。「$」を変数名の前につけることで、スカラ変数を表す。
代表的なスカラ値
代表的なスカラ値には以下のようなものがあります。
- 文字列
- 数値
- リファレンス
- 未定義値(undef)
スカラ値のスカラ変数への代入のサンプル
my $scalar; $scalar = "one"; #文字列 $scalar = 2; #数値 $scalar = [ 3, 4, 5 ]; # 配列へのリファレンス $scalar = { x => 6 }; # ハッシュへのリファレンス $scalar = sub { return 7 }; #サブルーチンへのリファレンス $scalar = undef; #未定義値
「配列変数」 - 複数の値を格納
「配列変数」は複数の値を含むことができる。配列変数の「各要素」に含むことができるのは、スカラ変数のみである。
「@」を変数の前につけることで、配列変数を表す。配列変数に代入できるのは、「リスト ()」 だけである。
# 配列変数は、スカラを要素に持つことができる my @elements = ( "one", 2, [3, 4, 5], {x => 6, y => 7}, sub { return 8 }, undef )
配列の入れ子は、配列の連結になる
Perlでは、配列の入れ子は、配列の連結になります。
my @list_in_list = ((1, 2), (3, 4)); # これと同じになる。 my @list = ( 1, 2, 3, 4 );
「ハッシュ変数」 - キーと値のペアを格納
ハッシュには以下の特徴があります。
「キーと値」がセットになった複数の値を含む。ハッシュ変数の「各要素」に含むことができるのは、スカラ変数のみである。
「%」を変数の前につけることで、ハッシュ変数を表す。ハッシュ変数に代入できるのは「リスト ()」 だけである。
my %scores = (math => 70, engligh => 80);
配列型とハッシュ型の変換
配列変数もハッシュ変数も、リストを内容として持つので、互いに変換可能。
@array = %hash; %hash = @array;
変数とスコープ
変数について、もうひとつ知っておきたいのは変数のスコープと寿命についてです。スコープは、変数がどの位置から見えるかということを表現する言葉です。寿命というのは、変数に値が保存されている期間のことです。
たとえば、myで宣言されたレキシカル変数の場合は「{」から「}」までがスコープとなります。
{ # ここで宣言 my $num = 3; } # ここからは見えない
「$num」に保存された値は「{ ... }」によるスコープが終わると、メモリ上からなくなり、$numという変数自体も見えなくなります。
変数のスコープと寿命については、以下の記事で詳しく解説していますので、ご覧ください。