Perl に挑戦したらエラー発生しないのに catch ブロックまで動いてはまった

最近は Perl スクリプトが割と使われている環境に居ます。
どちらかと言うと Rubyist だったけど、折角なので Perl な世界にも飛び込んでみました。
…で早速はまったのでメモメモ。

try-catch を書いてみた

既存のコードをコピーして try-catch を書いたところ、
正常な処理なのに catch の中まで動いてはまりました。

try {
  print "try\n";
} catch {
  print "catch\n";  # ここも動く
}

Perl では try-catch 構文はない

既存コードの try-catch を見て、言語仕様として
例外処理の仕組みがあると思い込んだのが敗因でした。

Perl では try-catch 構文がないようで、
既存コードではライブラリ Try::Tiny が頑張っているとのこと。

で、今回 catch まで動いてしまったのは use Try::Tiny をしていなかったから。
こんな感じのエラーも出ていたけど、他のログに埋もれて見落としてた orz

Can't call method "catch" without a package or object reference at - line 3.

Try::Tiny の仕組み

Try::Tiny の仕組みは少し考えれば予想はついたし、ググれば出てきた。
こんな括弧や sub が省略されてるんだろうな。

use Try::Tiny;
try (
  sub { print "try\n"; },
  catch ( sub { print "catch\n"; } )
);

Tags:

Categories:

Updated: