Perl Perl_0
Perl 「 配列変数 」pop & push に対する shift & unshift 演算子 (0x23)

Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x23 回。
Perl で 配列変数 を操作する時、僕はもうインデクスを必要としないかもしれない。(shit & unshift 編)
shift あるいは unshift 演算子で配列の先頭を操作する
前回までに紹介した、配列を操作する演算子「 pop 」と「 push 」は、スタック型で格納されたデータの「 末尾 (上下で言うと "上") 」に対して操作を行うものでした。
「 pop 」は末尾のデータを "ポッ" と取り出し、「 push 」はデータを "プッシュ" して配列の末尾に格納します。
今回説明する「 shift (シフト)」演算子と「 unshift (アンシフト)」演算子は、配列の「 先頭 (上下で言うと "下")」を操作するための演算子です。

shift & unshift 演算子を利用する
「 shift & unshift 」演算子の利用方法は、「 pop & push 」演算子と同じです。
「 shift 」が「 pop 」に、「 unshift 」が「 push 」に対応し、それぞれが配列の先頭に操作を施します。
「 shift 」演算子が先頭のデータを取り出す操作を担当し、「 unshift 」演算子が先頭にデータを加える操作を担当するということです。
@white = qw/ bright ryu /;
unshift (@white, "matilda"); # @white は matilda, bright, ryu
unshift @white, "woody"; # @white は woody, matilda, bright, ryu
@jaburo = shift (@white); # @white は matilda, bright, ryu
@midea = shift @white; # @white は bright, ryu
unshift 演算子は、push 演算子と同様に、第 1 引数 に対象の配列変数を置きます。第 2 引数以降にはデータリストを記述しますので、対象の配列に対して複数のデータを一度に格納することが出来ます。
また、shift, unshift とも、例によって「 ( ) 」を省略することが出来ます。
shift & unshift と pop & push の動作をまとめると次の様になります。

0x23 -> 0x24 へ
英語の「 shift 」は、「 移す 」や「 ずらす 」など、何かの位置を変更する意味を持っている様です。
コンピュータ用語としての shift はこれを踏まえるかたちで、「 位置をずらす 」や「 桁送り 」の意味を持っています。
英語で「 移動 」の意味には「 move 」がありますが、コンピュータ用語でもそれは同じです。
このことから、Perl で配列を操作する shift & unshift 演算子は、配列内のデータを大きく「 移動 」させるものではなく、インデクスを一桁単位で操作するものだとイメージ出来るかと思います。
pop & push 演算子は、配列の末尾を操作するので、既に格納済みのデータのインデクスは特に変化しませんが、配列の先頭に対して操作を行う shift & unshift 演算子では、配列全体のインデクスが 1 つずつ桁送りされることになります。ということです。
ひとつ僕がつまずいたのは、「 unshift 」でデータを追加するということです。
「 un 」という接頭辞を否定的な意味 "だけ" で捉えていたので、データを追加するというイメージが持てませんでした。
しかしながら、英語で「 un 」の意味を調べると、「 逆の動作 」を表すとあるので、必ずしも否定的な意味ではない様です。
参考情報は以下の書籍を中心に Wikipedia および各 Web サイト。それと詳しい先輩。
参考 :「Randal L. Schwartz, brian d foy, Tom Phoenix 共著 近藤 嘉雪 訳「初めての Perl 第 6 版」(オライリー・ジャパン発行 ISBN978-4-87311-567-2)」
次回 (0x24) へ続く。
過去記事 RSS
Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)