Tree::Simpleを使ってツリー表示を実装する(つもりだったけど)

久しぶりにBBSの続きを実装しようかと。ツリー表示をまだ実装していなかったので。
今回はツリー構造を作るのにTree::Simpleというモジュールを使ってみることにした。
で、

    my $iter = BBS::Message->retrieve_all;
    my %tree;
    while (my $m = $iter->next) {
        my $parent = $tree{$m->parent} || Tree::Simple::ROOT;
        $tree{$m->id} = Tree::Simple->new($m, $parent);
    }

こんな感じでID毎のツリーオブジェクトをハッシュに入れてから、

    $self->tt_process('tree.tt', {
        query => $q,
        tree => [map {$tree{$_}} sort {$a <=> $b} keys %tree],
        title_suffix => " - ツリー表示",
    });

こうして、あとはテンプレート(Template-Toolkit)に任せちゃえ!と思ったのだが問題が発生。テンプレートの中で再帰処理をする方法がわからん。っていうかできない・・・か?これができないと子供の子供(以下)が表示できない。Tree::Simple的にはtraverseというメソッドで再帰処理ができて、これはサブルーチンのリファレンスを引数にとって、各子供に対してコールバックしてくれるというもの。でもテンプレートでそんなことできないしな。
・・・まあ、今日はこんなところで、自分のレベルの低さを実感しつつ終わっておきます。

    • -

Tree::Simple - A simple tree object - metacpan.org
Template - Front-end module to the Template Toolkit - metacpan.org