Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Try::Tiny再入門

 Try::Tiny再入門

Gotanda.pm#20のLT発表資料です。

dorapon2000

May 21, 2021
Tweet

More Decks by dorapon2000

Other Decks in Programming

Transcript

  1. % whoami - 久保田享祐 / @dorapon2000 - モバイルファクトリー エンジニア -

    Perl歴1年のひよっこ - 入社してから覚えました - 最近ハマっていること - 著作権法 - 好きな判例は駒込大観音事件(控訴審)です - 読書 - 辻村深月は天才だということに今更ながら気づきました - はてなブログ → https://dorapon2000.hatenablog.com/ 2
  2. Try::Tinyとは - https://metacpan.org/pod/Try::Tiny - Perlで try / catch / finally

    文実現させてくれる偉大なモジュール 5 try {...} catch {...} finally {...} ;
  3. Try::Tinyとは - https://metacpan.org/pod/Try::Tiny - Perlで try / catch / finally

    文実現させてくれる偉大なモジュール 6 try {...} catch {...} finally {...} ; 🤔 なにこれ??!?
  4. try / catch / finally の構文解釈 7 try( sub {...},

    catch( sub {...}, finally( sub {...} ))) ; 第一引数のプロトタイプに &を指定すると、つまり CODE Refなのは明らかなので subを省略可能。おまけで ,も 第一引数として渡された場合、 &は sub キーワー ドや連続したカンマを 要求しないような無名サブ ルーチンを要求します。 サブルーチンの()は省略可能。省略する とリスト演算子(左方向)の優先順位に 従って、右側から評価されていく
  5. ソースコード 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文
  6. Try::Tinyとは(再掲) - https://metacpan.org/pod/Try::Tiny - Perlで try / catch / finally

    文実現させてくれる偉大なモジュール 16 try {...} catch {...} finally {...} ;
  7. Try::Tinyとは(再掲) - https://metacpan.org/pod/Try::Tiny - Perlで try / catch / finally

    文実現させてくれる偉大なモジュール 17 try {...} catch {...} finally {...} ; 🥳 わかる!!(進化)
  8. 明日使えない気づき 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.