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
360
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Try::Tiny再入門
Gotanda.pm#20のLT発表資料です。
dorapon2000
May 21, 2021
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
複数の Claude Code が"放置"されてしまう問題をCLI ダッシュボードを自作して解決した話
sumihiro3
1
640
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
240
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
1
210
yield再入門 #phpcon
o0h
PRO
0
910
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
510
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
560
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
180
20260722_microCMSで考える、AI時代のコンテンツ運用設計
yosh1
0
260
What's New in Android 2026
veronikapj
0
240
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.6k
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
17k
継続モナドとリアクティブプログラミング
yukikurage
3
670
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
420
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Rails Girls Zürich Keynote
gr2m
96
14k
Optimising Largest Contentful Paint
csswizardry
37
3.9k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
240
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
520
How to Talk to Developers About Accessibility
jct
2
470
GitHub's CSS Performance
jonrohan
1033
470k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
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