Perlのリスト
リストとは複数の値の並びを表現したものです。
# リスト ('a', 'b', 'c', 'd')
# 配列への代入 my @array = ('a', 'b', 'c', 'd'); # ハッシュへの代入 my %hash = ('a', 'b', 'c', 'd');
配列とリストの違い
配列とリストは、似ていますが、実際にはいくつか異なる部分があります。
一つ目の違いは、言語的な意味での違いです。配列は変数であり、リストは表記法であるということです。
二つ目は、スカラコンテキストで評価された場合に値が異なるということです。
次のコードを見てください。「$num1」と「$num2」はどうなると思いますか?
# スカラコンテキストでリストを評価 my $num1 = (5, 6, 7); # スカラコンテキストで配列を評価 my @nums = (5, 6, 7); my $num2 = @nums;
答えは「$num1」は「7」になり、$num2は「3」になります。
スカラコンテキストで、リストを評価すると「リストの最後の値」が返り、配列を評価すると「配列の個数」が返るからです。
ハッシュ用のリストの表記法
ハッシュに代入を行うために、「=>」を使用した簡易記法が用意されています。
# ハッシュ用の記法 my %hash = (a => 'b', c => 'd');
記法が異なるだけで通常のリストとまったく同じ意味です。=>の左側の文字列については英数字とアンダーバーのみで構成される場合にシングルクォートを省略することができます。シングルクォートを省略する記法が好んで用いられます。
リスト代入
リストを左辺に使うことによってリスト代入を行うことができます。複数の値を、複数の変数に代入できます。
my ($var1, $var2) = (3, 5);
コマンドライン引数の受け取りや、サブルーチンでの引数の受け取りで、リスト代入を使うことができます。
# コマンドライン引数の受け取り my ($var1, $var2) = @ARGV; # サブルーチンでの引数の受け取り sub foo { my ($var1, $var2) = @_; ... }
これは使用頻度が高いので、ぜひ覚えておきましょう。
文字列リスト演算子
文字列リスト演算子を使用すると、文字列のリストを簡単に表現することができます。
qw(Cat Mouse Dog)
文字列リスト演算子の詳しい解説については以下の記事を参考にしてください。
空のリストによる自動的な初期化
配列とハッシュは宣言されると同時に、空のリストによって初期化されます。
# 以下は同じ my @nums; my @nums = ();
# 以下は同じ my %score; my %score = ();