小ネタ。僕はPerlのガードオブジェクトが大好きです。

例えばPSGIサーバーのリクエスト のログを出したい。ついでにどこのURLにアクセスされた時のログなのかも書き出したい。普通に考えると出力全てにURLをいれておけばいいんだけど、URLが長いとログが見にくい。
[/path/to/this/action?foo=1&bar=2&baz=3&hogehogehogehogehoge=1234] This is a debug log!

それならリクエスト開始と終了を区切ればどこからどこまでかわかるよね!ってことでガードで実装すると良い感じ 
use strict;
use Log::Minimal;
use Scope::Guard;
use constant DEBUG => 1;

sub handle_psgi {
my ($self, $env) = @_;
my $guard;
if (DEBUG) {
debugf("BEGIN %s", $env->{REQUEST_URI});
$guard = guard {
debugf("END %s", $env->{REQUEST_URI});
};
}
.... リクエストの処理 ....
}
これなら自動的にリクエストが終わったらENDマークを入れてくれる!

BEGIN [/path/to/this/action?foo=1&bar=2&baz=3&hogehogehogehogehoge=1234]
.... ログ色々 ....
END [/path/to/this/action?foo=1&bar=2&baz=3&hogehogehogehogehoge=1234]

複数プロセスが立ち上がるサーバーならついでにログにPIDを入れておけばログが混ざってもだいたいこれで追える。

ついでに同じような仕組みで処理スピードのログも取れますのでいいですね。
use strict;
use Log::Minimal;
use Time::HiRes qw(gettimeofday tv_interval);
use constant DEBUG => 1;

sub handle_psgi {
my ($self, $env) = @_;
my $guard;
if (DEBUG) {
my $t0 = [gettimeofday];
$guard = guard {
my $elapsed = tv_interval($t0);
debugf("[%s]: TIMER %0.6f seconds", $env->{REQUEST_URI}, $elapsed);
};
}
.... リクエストの処理 ....
}  
こういう仕組みでログやタイマーを入れ込んでおくと、定数畳み込みも効いてるから本番環境にデプロイする時にもDEBUGフラグの中身を変えられるようにしておけばコードをコメントアウトする必要もないのでいいと思います。