でメソッド名として変数を使用:基本的に私はそうのようなperlのスクリプト(簡易)を持っているPerlの
my $dh = Stats::Datahandler->new(); ### homebrew module
my %url_map = (
'/(article|blog)/' => \$dh->articleDataHandler,
'/video/' => \$dh->nullDataHandler,
);
、私は%url_map
をループするつもりだ、と現在のURLがキーと一致した場合そのキーの値によって指さ私は関数を呼び出したい:
foreach my $key (keys %url_map) {
if ($url =~ m{$key}) {
$url_map{$key}($url, $visits, $idsite);
$mapped = 1;
last;
}
}
しかし、私はメッセージを取得しています:
Can't use string ("/article/") as a subroutine ref while "strict refs" in use at ./test.pl line 236.
行236は、行$url_map{$key}($url, $visits, $idsite);
になります。
私はこれまで同様のことをしてきましたが、私は通常、モジュールを使わずに関数にパラメータを渡しています。
の可能複製(http://stackoverflow.com/questions/4229562/how-:あなたはこれを必要とする場合、私は上記にリンクされている質問を参照してください。 to-take-code-constructor) –
あなたの問題はメソッドを呼び出すことではなく、そのメソッドへの参照を格納することです。上記のdupリンクを参照してください。 –
も参照してください[Perlでハッシュに格納されている関数名を呼び出す方法は?](http://stackoverflow.com/questions/1836178/how-do-i-他の半分(参照をあなたがそれを格納した後に呼び出す)のために、その部分も間違っているため、perlでハッシュインされた関数名を呼び出す)。 – Ether