>>114,116
ありがとうございます

> my $pkg = caller(++$i);
> unless(defined($pkg)) {

こんなこと出来るんですね…
すみません調べが足りず、callerに対して無効な範囲の引数を渡したら
落ちちゃうもんだとおもってました。

目的としては、余計な引数のリレーとかグローバル変数とか使わずに
エラーサブだけでツリー生成することでしたので、下記のような感じでテストしてみます。
うまく行ったら〆報告します。

sub err {
 my ($sadd) = @_;
 my @return;
 my $i = 0;
 while(1) {
  my $s = caller($i);
  if (defined $s) {
   @return .= $s;
  } else {
   last;
  }
  $i++;
 }
 print STDERR $sadd."\n".(join ' / ', reverse @return);
}