perl でスタックトレース

perl には confess というサブルーチンがあります。

confess はスタックトレースを表示し終了するサブルーチンです。confess の引数に終了した理由を記述するだけで、ソースコードの可読性が向上するだけでなく、障害時のトラブルシュートが容易になります。

#!perl
use strict;
use warnings;
use Carp;

sub foo {
    confess "something wrong";
    print "this line will not be executed.\n"
}
sub bar {
    foo;
}
sub baz {
    bar;
}

baz;
exit;

実行結果は次の通り。

$ perl stacktrace.pl 
something wrong at stacktrace.pl line 7
	main::foo() called at stacktrace.pl line 11
	main::bar() called at stacktrace.pl line 14
	main::baz() called at stacktrace.pl line 17
$