スタック

スタックは、popとpushでアクセスする、ただの配列である。つまり、単にpopとpushでアクセスすると、自分で決めたものに過ぎないわけだが、何かの内側に入ったらpushでスタックを加え、出たらpopで一つ取り出してあげることで、ネストを上手い事解析出来るのだ。

サイト生成システムは、ターゲットディレクトリ内を再帰的に走査して生成ディレクトリ内にファイル生成するのだが、再帰関数の頭でスタックにデータを加え、終わりでスタックからデータを出すようにすると、ディレクトリの深さを知る事が出来るわけだ。

実際には、こんな事はディレクトリのパスから分かるのだが、ちょっと工夫するとそれ以上の事が出来る。例えば、ウチのシステムでは、スタックにハッシュリファレンスを加える事にしていて、ハッシュリファレンスの内容はそのディレクトリのindexのtitleとパスにしている。再帰関数内でのファイル生成時に、このスタックをそのままテンプレートシステムに渡せば、すぐにナビゲーションが完成する。

Perlには、こんな風に『ルールを自分で決める』場面がかなり多い。オブジェクト指向にしてもそうで、ある程度みんなでルールを守ることで成り立っていし、もっと根本的に例えばflock等の関数でも、他を排除しているのではなく今ロックしているよという事を示しているだけだ。これを嫌がる人は多いらしいが、要はルールを守りさえすれば良いのだから、さほど困る事でも無いように思うのだが。礼儀正しくというのはPerl独自の『らしさ』かもしれない。

さて、それはともかく。このスタックというのもオブジェクトに出来そうだ。popとpushでアクセスするというルールを自分で決めるのではなく、オブジェクトに隠蔽してメソッドでアクセスすれば、ある程度は使い方を限定出来るかもしれない。今のところその必要性を感じないのでやらないが。