Perlには格納順序が保証されるアットマーク@で始まる配列とキーとなる文字とペアとなる値のセットで順序が保証されないシャープ#で始まる連想配列(≒ハッシュ)と呼ばれる変数があります。
この内、順序が保証される@配列では先頭または末尾の要素への操作が可能です。
Perlには変数の内、配列(@ではじまる数値キー型配列)変数から各値を追加・取出し(削除)する関数unshift/shift/push/popがあります。
・配列の先頭要素の 追加 → unshift 取出し・削除 → shift ・配列の最後尾・末尾要素の 追加 → push 取出し・削除 → pop |
それぞれ
unshift @abc, $abc; $del_top = shift @abc; push @abc, $abc; $del_tail = pop @abc; |
のように利用し、shiftとpopは左辺の変数に取り出した値を結果として返すので格納(取出)すことができ、右辺の配列からは削除され、先頭または末尾から取り出した要素以外の残りが、その配列の要素となります。
※$del_top、@abc、$abc、$del_tailはそれぞれお好きな変数名にする事ができます。 ※ shift と pop は、ループで処理済みの値を取り除くだけの場合 [ shift @abc;][ pop @abc;]として利用する事もあります。 |
例えば、Perlのルーチン・サブルーチン/メソッドの引数は特殊な変数@_に自動的に格納されるのでshiftを使うと本来は、
sub foo {
$arg = shift @_;
...
}
のようにすることができ、引数があれば@_に格納されることが保証されるので明記せずともよく省略可能で
$arg = shift;
また、Perlには直前の結果を自動的に受け取る特殊な変数$_があり、これを利用する場合には、受け取る変数さえも省略して
shift;
print $_;
のようにすることもできたりします。
またこの配列変数の値を参照・設定する場合は
・「@abcに曜日を格納」 @abc = ('日','月','火','水'・・・); ・「@abcの中身を参照」 $abc[0] には '日' $abc[1] には '月' $abc[2] には '火' $abc[3] には '水' ... |
のように「$」+配列変数名「abc」+「 [ 」+「数字」+「 ] 」をつけることによって配列変数「@abc」の中身を参照・設定する事ができます。
この時の配列の中身を「要素」、ブラケット[]を含めた数字は『添え字』といい、配列内の順に0からはじまる数字が対応しています。
因みにこの「$abc」という名前のスカラー変数があった場合でもPerlは「$abc」と「$abc[0]」等、添え字のついた配列変数とは区別しますので全く無関係な異なるものとみなします。