Perlゼミ(サンプルコードPerl入門)

2016-11-07

Perlの変数を理解しよう

  1. Perl
  2. 変数

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」による「値の保存と復元」については以下の記事をご覧ください。

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);

<b>配列型とハッシュ型の変換</b>

配列変数もハッシュ変数も、リストを内容として持つので、互いに変換可能。

@array = %hash;
%hash = @array;

変数とスコープ

変数について、もうひとつ知っておきたいのは変数のスコープ寿命についてです。スコープは、変数がどの位置から見えるかということを表現する言葉です。寿命というのは、変数に値が保存されている期間のことです。

たとえば、myで宣言されたレキシカル変数の場合は「{」から「}」までがスコープとなります。

{
  # ここで宣言
  my $num = 3;
}
# ここからは見えない

「$num」に保存された値は「{ ... }」によるスコープが終わると、メモリ上からなくなり、$numという変数自体も見えなくなります。

変数のスコープと寿命については、以下の記事で詳しく解説していますので、ご覧ください。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証