perlではcaller関数で呼出し元の情報を取得できます。
引数なしで実行すると、package,file,line noを取得
#!/usr/local/bin/perl use strict; use warnings; use Data::Dumper; sub func_1 { func_2(); } sub func_2 { func_3(); } sub func_3{ my @call_info = caller; print STDERR Dumper(\@call_info); } func_1();
[endo@colinux perl]$ ./foo.pl
$VAR1 = [
'main', #package name
'./foo.pl', #file name
10 #line number
];
引数付で実行すると、詳細情報を取得
($package, $filename, $line, $subroutine, $hasargs, $wantarray, $evaltext, $is_require, $hints, $bitmask, $hinthash) = caller($i);
caller(1)のように「いくつ前の呼出元か(0,1,2...)」を示す引数を指定すると、詳細な情報を得ることができます。
※caller(0)のように 0を指定すると、自身のmethod情報を取得できます
※返り値の説明は、次のurlをご覧下さい。
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod
#!/usr/local/bin/perl use strict; use warnings; use Data::Dumper; sub func_1 { my @ret = func_2(); } sub func_2 { my @ret = func_3(); } sub func_3{ my @call_info = caller(1); #callerで 1 を指定 print STDERR Dumper(\@call_info); } func_1();
[endo@colinux perl]$ ./foo.pl
$VAR1 = [
'main', #$package
'./foo.pl', #$filename
7, #$line
'main::func_2', #$subroutine
1, #$hasargs
1, #$wantarray
undef, #$evaltext
undef, #$is_require
1538, #$hints
'UUUUUUUUUUU', #$bitmask
undef #$hinthash
];