パラメータで分岐

このエントリに対して

2007年07月03日 fbis perl ハッシュでディスパッチテーブルを作っておくほうがキレイかな

http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/macperl/20070127/p1

ってコメントがあったのだけど、ハッシュでディスパッチテーブルってどうやるんだっけ?と思ったのでちょっと書いてみる。

#!/usr/bin/perl

use strict;
use warnings;

use CGI;

my $query = CGI->new;
my $mode = $query->param('mode');

my %dispatch = (
    view => \&view,
    edit => \&edit,
    add  => \&add,
);
$dispatch{$mode}->();
# 引数がいるなら
# $dispatch{$mode}->(qw/foo bar baz/);

sub view {
    # hoge
}

sub edit {
    # fuga
}

sub add {
    # piyo
}

たしかこうだっけ。たしかにこの方がifelsifelseの羅列よりスマートだけど、サブルーチンリファレンスを使うから入門書では使いにくい方法かなぁ。