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
260
Try::Tiny再入門
Gotanda.pm#20のLT発表資料です。
dorapon2000
May 21, 2021
Tweet
Share
More Decks by dorapon2000
See All by dorapon2000
Perlのよい書き方
dorapon2000
0
170
ns-3.29でモジュール開発
dorapon2000
0
990
Other Decks in Programming
See All in Programming
Java 22 Overview
kishida
1
160
入門 AWS Amplify Gen2 / Introduction to AWS Amplify Gen2
genkiogasawara
1
310
코틀린으로 멀티플랫폼 만들기
pangmoo
0
120
1인 개발자로 행복하게 살기 - GDG 송도 헬로월드 2024
benjaminkim
1
5.6k
try!Swift Tokyo 2024 参加報告 LT
akidon0000
1
190
[SF Ruby, March 2024] Rails on Wasm
palkan
0
360
コードレビューで学ぶ!Kotlinオブジェクト指向デザインパターン
akkie76
2
170
CQRS/ES avec Symfony, c’est (trop) bien !
jeremyfreeagent
1
630
FigmaとPHPで作る1ミリたりとも表示崩れしない最強の帳票印刷ソリューション
ttskch
39
17k
Elm Form Validation
bkuhlmann
0
500
try! Swift Tokyo 2024 参加報告 / try! Swift Tokyo 2024 Report
hironytic
0
160
せっかくモデル図描くのなら、嬉しいことが多い方がいいよね!
kuboaki
1
3.1k
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
352
28k
Optimizing for Happiness
mojombo
369
69k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
272
13k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
5
1.5k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
658
120k
Design by the Numbers
sachag
274
18k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
18
6.9k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
The Power of CSS Pseudo Elements
geoffreycrofte
58
5k
Fireside Chat
paigeccino
19
2.6k
Music & Morning Musume
bryan
40
5.6k
Building Flexible Design Systems
yeseniaperezcruz
318
37k
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