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
340
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.3k
Other Decks in Programming
See All in Programming
為你自己學 Python - 冷知識篇
eddie
1
350
テストコードはもう書かない:JetBrains AI Assistantに委ねる非同期処理のテスト自動設計・生成
makun
0
540
知っているようで知らない"rails new"の世界 / The World of "rails new" You Think You Know but Don't
luccafort
PRO
1
190
詳解!defer panic recover のしくみ / Understanding defer, panic, and recover
convto
0
250
API Platform 4.2: Redefining API Development
soyuka
0
140
パッケージ設計の黒魔術/Kyoto.go#63
lufia
3
440
go test -json そして testing.T.Attr / Kyoto.go #63
utgwkk
3
310
奥深くて厄介な「改行」と仲良くなる20分
oguemon
1
570
Amazon RDS 向けに提供されている MCP Server と仕組みを調べてみた/jawsug-okayama-2025-aurora-mcp
takahashiikki
1
120
実用的なGOCACHEPROG実装をするために / golang.tokyo #40
mazrean
1
300
概念モデル→論理モデルで気をつけていること
sunnyone
3
300
Putting The Genie in the Bottle - A Crash Course on running LLMs on Android
iurysza
0
140
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
A Modern Web Designer's Workflow
chriscoyier
696
190k
Reflections from 52 weeks, 52 projects
jeffersonlam
352
21k
How GitHub (no longer) Works
holman
315
140k
Designing Experiences People Love
moore
142
24k
Side Projects
sachag
455
43k
GraphQLの誤解/rethinking-graphql
sonatard
72
11k
It's Worth the Effort
3n
187
28k
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