Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Try::Tiny再入門
Search
dorapon2000
May 21, 2021
Programming
0
350
Try::Tiny再入門
Gotanda.pm#20のLT発表資料です。
dorapon2000
May 21, 2021
Tweet
Share
More Decks by dorapon2000
See All by dorapon2000
Perlのよい書き方
dorapon2000
0
180
ns-3.29でモジュール開発
dorapon2000
0
1.4k
Other Decks in Programming
See All in Programming
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
700
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
3
410
maplibre-gl-layers - 地図に移動体たくさん表示したい
kekyo
PRO
0
320
社内規程RAGの精度を73.3% → 100%に改善した話
oharu121
13
8.2k
Codexに役割を持たせる 他のAIエージェントと組み合わせる実務Tips
o8n
4
1.4k
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
500
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
230
PHP 7.4でもOpenTelemetryゼロコード計装がしたい! / PHPerKaigi 2026
arthur1
1
340
存在論的プログラミング: 時間と存在を記述する
koriym
3
280
20260315 AWSなんもわからん🥲
chiilog
2
170
20260228_JAWS_Beginner_Kansai
takuyay0ne
5
600
Everything Claude Code OSS詳細 — 5層構造の中身と導入方法
targe
0
150
Featured
See All Featured
KATA
mclloyd
PRO
35
15k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
830
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.5k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.2k
Music & Morning Musume
bryan
47
7.1k
BBQ
matthewcrist
89
10k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.2k
Speed Design
sergeychernyshev
33
1.6k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
320
Crafting Experiences
bethany
1
90
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
160
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Transcript
Try::Tiny再入門 2021/5/21 Gotanda.pm#20 dorapon2000
% whoami - 久保田享祐 / @dorapon2000 - モバイルファクトリー エンジニア -
Perl歴1年のひよっこ - 入社してから覚えました - 最近ハマっていること - 著作権法 - 好きな判例は駒込大観音事件(控訴審)です - 読書 - 辻村深月は天才だということに今更ながら気づきました - はてなブログ → https://dorapon2000.hatenablog.com/ 2
Perlでの素朴な例外処理 - https://perldoc.jp/func/eval - perlではeval構文と$@で例外処理を実現する - evalはBLOCK内のコードを一度だけパースして perlとして実行する - eval内部で、構文エラー・実行エラー・
dieが発生した場合、その時点で実行を終了して、 $@にエ ラーメッセージを設定する 3 Error occur: MyError at path/to/script.pl line 1.
Try::Tinyとは - https://metacpan.org/pod/Try::Tiny - Perlで try / catch / finally
文実現させてくれる偉大なモジュール 4
Try::Tinyとは - https://metacpan.org/pod/Try::Tiny - Perlで try / catch / finally
文実現させてくれる偉大なモジュール 5 try {...} catch {...} finally {...} ;
Try::Tinyとは - https://metacpan.org/pod/Try::Tiny - Perlで try / catch / finally
文実現させてくれる偉大なモジュール 6 try {...} catch {...} finally {...} ; 🤔 なにこれ??!?
try / catch / finally の構文解釈 7 try( sub {...},
catch( sub {...}, finally( sub {...} ))) ; 第一引数のプロトタイプに &を指定すると、つまり CODE Refなのは明らかなので subを省略可能。おまけで ,も 第一引数として渡された場合、 &は sub キーワー ドや連続したカンマを 要求しないような無名サブ ルーチンを要求します。 サブルーチンの()は省略可能。省略する とリスト演算子(左方向)の優先順位に 従って、右側から評価されていく
ソースコード https://metacpan.org/release/Try-Tiny/source/lib/Try/Tiny.pm 1. finally が①を受け取る 2. catch が②と①を受け取る 3. try
が③と②と①を受け取る a. ①を ScopeGurd のオブジェクトに登録 b. eval {③} をする c. $@があれば②を実行する d. 終了(ScopeGurdオブジェクトがGCされる) 4. ScopeGurdのDESTROYが発火して①を実行 8 try catch finally ScodeGurd try( sub {③}, catch( sub {②}, finally( sub {①} ))) ; try文 catch文 finally文
finally 9 使われない finallyはblessしてるだけ tryの条件分岐で使う
catch 10 finallyの返り値 仕組みはfinallyと全く同じ
try① finallyのために 11 finally文をScopeGuardに登録 参照されることはないが tryサブルーチンの終了まで保持 catchの返り値
try② try文の実行 12 Try::Tinyも本質は evalと$@による例外処理 try文の実行
try③ catch文の実行 13 catch文の実行 evalで失敗して catch文があれば これにてtryサブルーチンは終了
ScopeGuard 14 tryサブルーチンの終了時に $_finally_guards がGCされる ため DESTROY が実行される finallyの実行 $@
はい🙃 15
Try::Tinyとは(再掲) - https://metacpan.org/pod/Try::Tiny - Perlで try / catch / finally
文実現させてくれる偉大なモジュール 16 try {...} catch {...} finally {...} ;
Try::Tinyとは(再掲) - https://metacpan.org/pod/Try::Tiny - Perlで try / catch / finally
文実現させてくれる偉大なモジュール 17 try {...} catch {...} finally {...} ; 🥳 わかる!!(進化)
明日使えない気づき finallyの後ろにいくつもfinallyを繋げられる 18 catch at /path/to/script.pl line 6. finally 1
at /path/to/script.pl ine 12. finally 2 at /path/to/script.pl line 10. finally 3 at /path/to/script.pl line 8.
参考 - https://ja.stackoverflow.com/questions/7549/ - https://metacpan.org/pod/Try::Tiny - https://perldoc.jp/docs/perl/5.30.0/perlvar.pod - https://perldoc.jp/func/eval -
https://perldoc.jp/docs/perl/5.30.0/perlsub.pod - https://perldoc.jp/docs/perl/5.30.0/perlobj.pod 19
ご清聴ありがとうございました 20