in
Perl
- 25 10月, 2013
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{ページのパラメータ値}->(引数,,,); }
これでパラメータと実行関数を紐付て処理することができ
不正パラメータを実行しない処理を含める事が出来ます。
なかなか便利なんですよ
うーん見辛い
syntaxhighlighterを採用して見やすくした