最新の「新着記事」はここから New!
2008-04-24
caller関数 - 実行している関数名を取得
実行している関数名を取得するにはcaller関数を使用します。
my $this_func_name = (caller 0)[3]; $this_func_name =~ s/.*:://;
caller 関数の引数で、0 を指定すると、実行している関数の情報が取得できます。戻り値の4番目に、関数名が入っています。パッケージ名を含めた完全修飾名を取得するので、正規表現で :: までを、取り除いてあげれば、関数名だけを取得できます。
サンプル
caller関数のサンプルです。
use strict; use warnings; # 実行している関数の名前を取得すする # caller print "1: 実行している関数の名前を取得する。\n"; func_name(); sub func_name{ my $this_func_name = (caller 0)[3]; # caller 関数の引数に 0 を指定すると # 自分自身の関数の情報が、取得できる。 # 4番目( 要素番号は 3)に関数名が、入っている。 print $this_func_name, "\n"; print "\n"; } print "2: パッケージ名のない関数名を取得する。\n"; func_name_none_package(); sub func_name_none_package{ my $this_func_name = ( caller 0 )[3]; $this_func_name =~ s/.*:://; print $this_func_name, "\n\n"; } print "3: 関数名取得をサブルーチン化する。\n"; test1(); sub test1{ print get_func_name() . "\n"; } sub get_func_name{ # caller関数の引数に、1 を指定すると # 呼び出し元の関数の情報を取得できる。 my $this_func_name = (caller 1)[3]; $this_func_name =~ s/.*:://; return $this_func_name; }
実行結果
1: 実行している関数の名前を取得する。 main::func_name 2: パッケージ名のない関数名を取得する。 func_name_none_package 3: 関数名取得をサブルーチン化する。 test1


