PerlならサンプルコードPerl入門

2008-04-24

caller関数 - 実行している関数名を取得

  1. Perl
  2. 関数
  3. 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

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証