Perlの配列

Perlの配列の使い方のあれこれである。

配列の「ゆるゆるさ」

配列の個々の要素を取り出すときに「@」と「$」をよく混同して使ってしまうことがある。しかし、それでも一応は動作してしまう。
今まで作った*.cgiの中にもこれが混用されている可能性があるから、見直すときは注意する。

参考 @female = ( "篠崎愛", "本田美穂", "有村架純", "高畑充希", "森カンナ" ); $var = @female; print "$var<br>\n"; # 配列の要素数の「5」が表示される。 print "<br>\n"; print "@female[3]<br>\n"; # 「高畑充希」が表示される。Perlの配列の使い方では破格(まちがい)である。 print "$female[2]<br>\n"; # 「有村架純」が表示される。これは正常な使い方。 print "<br>\n";

これと同種の例として下記のトピックを参照。

「ゆるゆるさ」と「まちがい」(perl_6036)


foreachとリスト値(配列)

配列の列挙表示である。
外部の$girlとforeachループ内で使われた$girlとはまったく別のものであるということである。

参考 $girl = "松風理咲"; print "$girl<br>\n "; # 「松風理咲」が表示される。 print "<br>\n"; @female = ( "篠崎愛", "本田美穂", "有村架純", "高畑充希", "森カンナ" ); # 配列のデータの作成(初期化) foreach $girl (@female) { print "$girl "; # foreach内で使われる変数は{}だけのローカル変数である。 # その値を{}の外部に持ち出すことはできない。 # ただし、それを他の変数に代入して外部で使うことはできる。 } # 「篠崎愛 本田美穂 有村架純 高畑充希 森カンナ」が表示される。 print "<br><br>\n"; print "$girl<br>\n "; # 「松風理咲」が表示される。 print "<br>\n";


「配列もどき」と「参照」

配列とまぎらわしい例である。
下記の「配列もどき」は、普通はこんなことはしない。何かの間違いでやってしまった、というような場合にしか起こらない。要するに、ドジを踏んだ場合にしかありえないものである。

参考 配列もどき(単にスカラーの設定) $ary = ( "篠崎愛", "本田美穂", "有村架純", "高畑充希", "森カンナ" ); # これは配列にはならない。この点では「$」と「@」の差は厳然と貫かれているということである。 # 配列もどきであって配列ではない。$aryはスカラーである。 # 各値が順に$aryに代入されていき、最後の「森カンナ」が最終的な値になるだけである。 print "$ary<br>\n"; # 「森カンナ」が表示される。 print "<br>\n"; 参照(リファレンス) $ref = [ "篠崎愛", "本田美穂", "有村架純", "高畑充希", "森カンナ" ]; # これは参照である。 print "$ref->[0]<br>\n"; # 「篠崎愛」が表示される。 print "$ref->[1]<br>\n"; # 「本田美穂」が表示される。 # $refは配列ではないから、$ref[1]とはできない。 print "<br>\n";

これは無名データ(無名配列)への参照(リファレンス)の例である。
■無名データへのリファレンス
変数に保存されていないリテラルデータへのリファレンスを生成することも可能だ。このデータは無名データと呼ばれる。なぜなら名前の付いた変数とはまったく結びつきがないからだ。
スカラー定数へのリファレンスを生成するには、リテラル文字列や数値に逆スラッシュを単に付ければいい。
また無名配列へのリファレンスは、値のリストをブラケットで囲んでやれば生成できる。
 $shortbread = [ "flour", "butter", "eggs", "sugar" ];
このコードは配列へのリファレンスを生成するが、この配列は$shortbreadというリファレンスを介してのみ利用できる。
- Ellen Siever,Stephen Spainhour,Nathan Patwardhan著「Perlクイックリファレンス」(O'REILLYジャパン)90p -
ちなみに、その反対の「有名データ(有名配列)」への参照(リファレンス)とは、下記のようなものをいう。

参考 @bread = ( "flour", "butter", "eggs", "sugar" ); # この配列には「bread」という名前が付いている。 $shortbread = \@bread; # $shortbreadは名前の付いた配列「bread」への参照になる。

ここでの「有名」「無名」とは、「有名な俳優」「有名な観光地」や「無名の新人」「無名のタレント」などの場合に使われる「有名」「無名」とは関係がない。
ひとかたまりのデータに「名前が付いている」場合が「有名」であり、ひとかたまりのデータに「名前が付いていない」場合が「無名」である。この意味では、世界の人間はほとんどが「有名人」である(笑)。


Ellen Sieverほか著「Perlクイックリファレンス」(O'REILLYジャパン)

EXECUTE
上のサンプルの実行例(labo_0005)

実行例
松風理咲

篠崎愛 本田美穂 有村架純 高畑充希 森カンナ

松風理咲

5

高畑充希
有村架純

森カンナ

篠崎愛
本田美穂

- 2018/06/20 -