Perlについての質問箱 38箱目
レス数が950を超えています。1000を超えると書き込みができなくなります。
0951デフォルトの名無しさん
2009/01/11(日) 20:37:23package foo;
sub new {
my ($class, %conf) = @_;
my $self = bless {}, $class;
$self->{hoge_func} = \&hoge_func;
$self->{piyo_func} = \&piyo_func;
return $self;
}
sub call_function {
my ($self, $func_name, $argv) = @_;
return $self->{$func_name}($argv);
}
sub hoge_func { #いろいろ }
sub piyo_func { #いろいろ }
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
呼出側で
$obj->call_function('hoge_func', $argv);
とすると、 hoge_func, piyo_func ともに $_[0] に $argv がきてしまいます。
$_[0] には、オブジェクトのリファレンスが入ってるものだと思ってたのですが、
そうする為には sub call_function{} の return のとこを
return $self->{$func_name}($self, $argv);
にしないと オブジェクトのリファレンスが渡されません。
何故でしょうか?
また、こういう事をしたい場合の王道的な方法というのがあったら教えてください。
実際には hoge_func, piyo_func 的な関数が 数十から百くらいになる予定なので
統一的な呼び出し方にしたいのです。
レス数が950を超えています。1000を超えると書き込みができなくなります。