以下の内容はhttps://hirose31.hatenablog.jp/entry/20070517/1179397483より取得しました。


元のメソッドを保存しつつオーバーライドしたい

とあるメソッド(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;



以上の内容はhttps://hirose31.hatenablog.jp/entry/20070517/1179397483より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14