blog20100901

2013/08/20 - プログラミング言語 Perl にまつわる etc. - Perl monger
参考 : perldoc, perldoc.jp, search.cpan.org, perldoc.perl.org ...
「 初めての Perl 第 6 版 」(オライリー・ジャパン発行 ISBN978-4-87311-567-2) 」
「 続・初めての Perl 改訂版 」(オライリー・ジャパン発行 ISBN4-87311-305-9) 」
「 Effective Perl 第 2 版 」(翔泳社発行 ISBN978-4-7981-3981-4) 」 ... etc,.

Perl Perl_0

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

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

Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x23 回。

Perl で 配列変数 を操作する時、僕はもうインデクスを必要としないかもしれない。(shit & unshift 編)

shift あるいは unshift 演算子で配列の先頭を操作する



前回までに紹介した、配列を操作する演算子「 pop 」と「 push 」は、スタック型で格納されたデータの「 末尾 (上下で言うと "上") 」に対して操作を行うものでした。

「 pop 」は末尾のデータを "ポッ" と取り出し、「 push 」はデータを "プッシュ" して配列の末尾に格納します。

今回説明する「 shift (シフト)」演算子と「 unshift (アンシフト)」演算子は、配列の「 先頭 (上下で言うと "下")」を操作するための演算子です。

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

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 の動作をまとめると次の様になります。

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

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)の記事
 Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228) (2023-10-11 23:49)
 Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227) (2023-05-26 15:41)
 Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226) (2023-05-19 17:05)
 Perl mp2 翻訳 テンプレートシステムの選択 (d225) (2022-08-15 22:23)
 Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224) (2022-06-15 20:43)
 Perl mp2 翻訳 チュートリアル (d223) (2022-06-15 20:42)

Llama
リャマ
TI-DA
てぃーだブログ
プロフィール
セラ (perlackline)
セラ (perlackline)
QRコード
QRCODE
オーナーへメッセージ

PAGE TOP ▲