元のメソッドを保存しつつオーバーライドしたい
とあるメソッド(Foo#greet)を呼ぶ前にちょっとごにょごにょ前処理的なことをしたい。
前処理した後は、オリジナルのメソッドを呼びたい。
でも、メソッド名はそのまま(greet)でコールしたい。
こんなんでいいのかなぁ?
#!/usr/bin/env perl use strict; use warnings; package Foo; sub new { my $class = shift; bless { @_ }, $class; } sub greet { my($self) = @_; print "Hello, ", $self->{name}, "\n"; } package main; { # override no warnings 'redefine', 'once'; package Foo; *greet_orig = \&greet; *greet = sub { my($self) = @_; $self->{name} .= ' san'; $self->greet_orig(@_); # call original }; } my $o = Foo->new(name=>'ank'); $o->greet;