{{tag> note:perl note:perl:oop}} ---json { "title":"関数の再定義", "description":"関数を再定義するサンプルを作ってみました" } --- \\ ==== 関数の再定義 ==== \\ 関数を再定義するサンプルを作ってみました。\\ まず、 package M; use Data::Dumper; sub new { my $class = shift; my $self = { @_ }; bless($self, $class); # $self->_init(); return $self; } sub a { print "** original\n"; my $self = shift; my $chr = shift; printf "** (%s)\n", join(',', caller(0)); printf "** chr=[%s]\n", $chr; print "[caller]\n".Dumper(caller)."[/caller]\n"; print "\n"; } 1; のようにモジュールを作成し、メインプログラムに、 use M; my $m = new M; $m->a("O"); # 関数呼び出し # このあと関数の上書き package M; sub a { print "** overwrite\n"; my $self = shift; my $chr = shift; printf "** (%s)\n", join(',', caller(0)); printf "** chr=[%s]\n", $chr; print "\n"; } のように関数M::aを再定義したプログラムを作成しました。\\ 実行してみると、\\ ** overwrite ** (main,z.pl,6,M::a,1,,,,256,,) ** chr=[O] のようになり、ちなみに再定義前では、\\ ** original ** (main,z.pl,6,M::a,1,,,,256,,) ** chr=[O] [caller] $VAR1 = 'main'; $VAR2 = 'z.pl'; $VAR3 = 6; [/caller] のようになります。\\ 用途としてどのようなものがあるのかよくわかりません。\\ ~~DISCUSSION~~