ちょっとではあるがPerlはその文法を拡張することも出来る。

try {
	&undefined;
} catch {
	print "catch: $_\n";
} finally {
	print "finally\n";
};

これはPerlの例外処理コードとして間違ってはいない。
仕掛けは以下。昨日の文法拡張ほど強引ではなく、普通の機能。

sub try(&@)
{
	my ($try, $catch, $finally) = @_;
	eval { &$try };
	if ($@) { local $_ = $@; &$catch; }
	if (defined &$finally) { &$finally; }
}

sub catch (&;@)
{
	return @_;
}

sub finally(&)
{
	return @_;
}

なんだかマクロ(プリプロセッサ)で拡張しまくりのC++が、
Javaとかに負けていないという悲しい主張と同じ気分なのは秘密。


Rubyを覚えなくてはならない可能性が出てきたので、
きっとPerlとはお別れだ。