呼び出されたメソッド名を取得する

caller とかたまにしか使わないので忘れる。
引数に数値を与えるとその分だけ戻ったところのスタックフレームを返す。

あと、wantarray だから左辺値スカラにすると意図しないものが返ってくるので注意。

use strict;
use warnings;
use utf8;

warn Hoge->hogera();

{
    package Hoge;

    sub hogera {
        my $self = shift;

        return $self->_myname();
    }

    sub _myname {
        my @stack = caller(1);
        my $methodname = $stack[3];
        $methodname =~ s{\A .* :: (\w+) \z}{$1}xms;
        return $methodname;
    }

    1;
}

実行結果

$ perl caller.pl
hogera at caller.pl line 5.