■
ちょっとではあるが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とかに負けていないという悲しい主張と同じ気分なのは秘密。