SlideShare a Scribd company logo
1 of 23
finally (not finally)
@ytnobody
@ytnobody – わいとん
• CEO of Y.pm LLC
• Founder of Ooimachi.pm
YAPC::Kyoto 2023 「裏トーク」
引用元 https://blog.yapcjapan.org/entry/2023/03/15/120000
真新しい話はたぶんないですが。
use v5.34;
use experimental qw(try);
• v5.34でtry/catchがperlにも来ていた
• もう2年前のお話
やってみる
やってみる
Ctrl-C
やってみる
Ctrl-C
実行されとらんが?
やってみる
このループにいる最中で
Ctrl-C押されてる
やってみる
一応tryの中だけど?
try/catchはシグナルを処理しない
それはそう😌
こうなった
こうなった
Ctrl-C
こうなった
catch動いた
シグナルを処理するロジックのおかげ
(try/catchのおかげではない)
Ctrl-C(SIGINT)を
受け取ったときの処理
ところでfinallyをつかうとこうなる
finallyがすること
• try/catchの処理後、必ずブロック内のコードを実行する
• 何か例外をcatchしても仕事をする。
• ようするに「あと始末」に使いそう。
ところで、try/catch/finally以前は
どうしていたのか?
• Try::Tinyでよしなにする
• eval { … }; if ($@) { … }; と
Guard.pmでがんばる
個人的感想
モジュール作者以外はtry/catch/finally使おう
• モジュール作者の場合、どう
しても古い環境(Perl 5.12等)
で動かされてしまうことを念
頭に置かないといけない。
• そこをサポート外とするのは全
然アリ。
• 画像はMojoliciousのCPAN
Testers Matrix
• モジュール作らないor新しい
Perlを使えるなら、平易な書
き方の方がいい。
引用元 http://matrix.cpantesters.org/?dist=Mojolicious
個人的感想
finallyとGuard.pmのguardは用途が近そう
• ようするに「あと始末」要員
• でも外部モジュールに依存しなくていいので、finally使いたい
• guardの場合、コードの見た目の前後関係が逆になりがち
• 上から下に読み下したいと思った時に目が滑るかも
• before v5.34, finally is not finally, it's a guard object.
• finally is not finally っていいたいだけ
個人的感想
記号が減るのは良い
• eval/if($@) と比較して try/catch/finally は…
• 覚えることが少ない
• 記号が減る
• ので、良い。
おまけ
• GPT先生に聞いてみた
GPT先生・・・

More Related Content

More from azuma satoshi

入れ子構造を分解する
入れ子構造を分解する入れ子構造を分解する
入れ子構造を分解するazuma satoshi
 
YAPC::Asia 2012 CPANに恩返ししよう
YAPC::Asia 2012 CPANに恩返ししようYAPC::Asia 2012 CPANに恩返ししよう
YAPC::Asia 2012 CPANに恩返ししようazuma satoshi
 
ライブコーディング(?)で学ぶPerlオブジェクト指向
ライブコーディング(?)で学ぶPerlオブジェクト指向ライブコーディング(?)で学ぶPerlオブジェクト指向
ライブコーディング(?)で学ぶPerlオブジェクト指向azuma satoshi
 
Perlbeginnes 4 keynote
Perlbeginnes 4 keynotePerlbeginnes 4 keynote
Perlbeginnes 4 keynoteazuma satoshi
 
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話azuma satoshi
 
Perlbeginners 3 opening talk
Perlbeginners 3 opening talkPerlbeginners 3 opening talk
Perlbeginners 3 opening talkazuma satoshi
 
Perlbeginnes 2 keynote
Perlbeginnes 2 keynotePerlbeginnes 2 keynote
Perlbeginnes 2 keynoteazuma satoshi
 
Perl Beginners #1 keynote
Perl Beginners #1 keynotePerl Beginners #1 keynote
Perl Beginners #1 keynoteazuma satoshi
 
大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向azuma satoshi
 
Alluren of prototype-based OOP
Alluren of prototype-based OOPAlluren of prototype-based OOP
Alluren of prototype-based OOPazuma satoshi
 

More from azuma satoshi (13)

入れ子構造を分解する
入れ子構造を分解する入れ子構造を分解する
入れ子構造を分解する
 
YAPC::Asia 2012 CPANに恩返ししよう
YAPC::Asia 2012 CPANに恩返ししようYAPC::Asia 2012 CPANに恩返ししよう
YAPC::Asia 2012 CPANに恩返ししよう
 
ライブコーディング(?)で学ぶPerlオブジェクト指向
ライブコーディング(?)で学ぶPerlオブジェクト指向ライブコーディング(?)で学ぶPerlオブジェクト指向
ライブコーディング(?)で学ぶPerlオブジェクト指向
 
Perlbeginnes 4 keynote
Perlbeginnes 4 keynotePerlbeginnes 4 keynote
Perlbeginnes 4 keynote
 
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
 
Perlbeginners 3 opening talk
Perlbeginners 3 opening talkPerlbeginners 3 opening talk
Perlbeginners 3 opening talk
 
PSGIへの誘い
PSGIへの誘いPSGIへの誘い
PSGIへの誘い
 
Perlbeginnes 2 keynote
Perlbeginnes 2 keynotePerlbeginnes 2 keynote
Perlbeginnes 2 keynote
 
Hachiojipm 14 LT
Hachiojipm 14 LTHachiojipm 14 LT
Hachiojipm 14 LT
 
Perl Beginners #1 keynote
Perl Beginners #1 keynotePerl Beginners #1 keynote
Perl Beginners #1 keynote
 
大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向
 
Hachioji.pm #13 LT
Hachioji.pm #13 LTHachioji.pm #13 LT
Hachioji.pm #13 LT
 
Alluren of prototype-based OOP
Alluren of prototype-based OOPAlluren of prototype-based OOP
Alluren of prototype-based OOP
 

finally (not finally)