小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

はじめてのPerlでつまずくこと

Perlで、たとえば、以下のソースを他の言語経験がはじめて見た時に、たぶん、?だと思います。

  • 同じ変数名($aaa)が使われている違いは、なんだろう?
  • リストを囲っている()、{}、[]の違いは、なんだろう?
use strict;
use warnings;

my $aaa;

my @aaa = (1, 2, 3, 4);
my %aaa = (1 => '001', 2 => '002', 3 => '003', 4 => '004');
for ($aaa = 0; $aaa <= 3; $aaa++) {
     print $aaa{$aaa[$aaa]}, "\n";
}

my @bbb = (1, 2, 3, 4);
my %ccc = (1 => '001', 2 => '002', 3 => '003', 4 => '004');
for ($aaa = 0; $aaa <= 3; $aaa++) {
     print $ccc{$bbb[$aaa]}, "\n";
}

my $bbb = [1, 2, 3, 4];
my $ccc = {1 => '001', 2 => '002', 3 => '003', 4 => '004'};
for ($aaa = 0; $aaa <= 3; $aaa++) {
     print $ccc->{$bbb->[$aaa]}, "\n";
}

上記を理解するには、下記の理解が必要です。

  • 同じ変数名でも頭文字($,@,%)が違うと、全く別の変数になる。
  • 配列変数やハッシュ変数の要素にアクセスするときは、インデックスを指定して同名のスカラー変数になる。
  • 小カッコは、普通のリストやハッシュのリストを記述し、配列変数やハッシュ変数に各々の値が代入される。
  • 中カッコは、ハッシュのリストを記述し、スカラー変数に代入すると、ハッシュのリファレンスが代入される。
  • 大カッコは、普通のリストを記述し、スカラー変数に代入すると、配列のリファレンスが代入される。


尚、for文で使われている小カッコと中カッコは、今回説明対象外になっています。


本ブログの応援クリックも、よろしくお願いします。