Perlでポインタ

記念すべき最初の投稿で、とっさに何かを書けと言われて思いつかないので
Perlであまり見かけないけど、私は良く使っている手法を1つご紹介。

タイトルの通り、PerlでC言語で言うところのポインタの機能を使う方法で
正式にはリファレンスと呼ぶらしい。

まずは簡単な説明をすると

my %user = ('name' => 'Beckham', 'age' => 0, 'height' => 0);
my $age = 12;
my $height = 165;

$user{'age'} = \$age;
$user{'height'} = \$height;

ここまでで、%userのハッシュの中身は

print "\$user{'name'} = ".$user{'name'}."\n";
print "\$user{'age'} = ".${$user{'age'}}."\n";
print "\$user{'height'} = ".${$user{'height'}}."\n";

出力結果

$user{'name'} = Beckham
$user{'age'} = 12
$user{'height'} = 165

その後

$age = 13;
$height = 170;

として、上記のprint文を実行すると

出力結果

$user{'name'} = Beckham
$user{'age'} = 13
$user{'height'} = 170

になります・

キモは$user{'age'}を直接変更したわけではなく、参照先の$age変数の値を変更したことです。

ポインタが解る人はこの手の話はすぐに理解できると思いますが
これを応用するとこんな事もできます。

my @_page_list = ('page1', 'page2');
my %_page_func = ($_page_list[0] => \&page_func1, $_page_list[1] => \&page_func2);
if (exists($_page_func{ページのパラメータ値}))
{
	print $_page_func{ページのパラメータ値}->(引数,,,);
}

これでパラメータと実行関数を紐付て処理することができ
不正パラメータを実行しない処理を含める事が出来ます。

なかなか便利なんですよ