pop, push, shift, unshift

  • popは配列の最後尾の要素を取り出して、返す。
  • pushは配列の最後尾の要素に追加する。
  • shiftは配列の先頭の要素を取り出して、返す。
  • unshiftは配列の先頭の要素に追加する。

あぁ素敵。
配列処理としては便利な演算子たち。
これを回せば全ての要素を舐めることができるんですね。
Cだとインデクスをインクリメントして
舐めるところですが。


P55の脚注に、ジョークという言葉に紛らわせて
筆者の主張が力強く書かれています。

配列に対してインデクス(添え字付けする)を使うということは、Perlの良さを活用していないことになります。もし添え字付けの代わりにpop、push、および類似の演算子を使うと、あなたのコードは、たくさんの添え字付けをする場合に比べて、たいてい速くなります。さらに、「添え字が1つずれてしまった」という間違い---いわゆる「植え木算エラー(fencepost error)」---を避けることができます。しばしば、初心者のPerlプログラマが(Cに比べてPerlのスピードがどれくらいかを知ろうとして)、C言語向けに最適化されたソートアルゴリズム(添え字付けを大量に含むもの)を、Perl向けにそのまま(大量の添え字付けを含んだまま)書き換えて、「何でこんなに実行が遅いのでしょう?」と質問してくることがあります。それに対する答えは、「ストラディバリウスのバイオリンを使って、釘を打つのは良い工作法とは言えません」というものです。

後半の大袈裟な比喩にはニヤリとさせられますが、
それにしてもこれらの演算子の価値はあります。
ただし添え字付けを使わずにこれらの演算子だけで実行するには
不便も多いので、両方できるところに価値があるんでしょう。