Re: [情報] 作了個 Return::Deep 模組

作者: CindyLinz (Cindy Wang)   2020-04-14 21:10:25
Return::Deep 再加了兩組功能:
第一組是指定 symbol return 好幾層出去的 sym_ret($symbol, @return_values) 和
用來擋下 sym_ret 的 ret_bound {......} $catcher。
$catcher 如果沒指定的話會擋下所有的 sym_ret;
如果是一個字串的話會擋下以同一個字串為 $symbol 的 sym_ret;
如果是一個 regex 的話會擋下可以 match 的 $symbol。
如果 symbol 自己約定好特定的規則,搭配 regex 可以作成階層式的 exception,
但靈活性更高,甚至可以作成 tag 式的 exception。
另一組是 deep_wantarray($depth) 與 sym_wantarray($symbol)
對應 Perl 原生的 wantarray 功能,這是 Perl 的特色 context-sensitive 功能,
可以在真的 return 出去以前,
先探知要接 return 的 caller 想接的是純量還是向量,或是什麼都不接。
※ 引述《CindyLinz (Cindy Wang)》之銘言:
: 抗疫連假窩在家裡寫程式,寫了一個 perl 模組
: 功能是可以指定層數,一次 return 出好幾層函數的「深return」XD
: return 出 eval block 的時候也適用
: cpan https://metacpan.org/pod/Return::Deep
: github https://github.com/CindyLinz/Perl-Return-Deep
: use Return::Deep;
: sub a {
:  b();
:  # never goes here
: }
: sub b {
:  deep_ret(2, 'Hi', 42);
: }
: my @ret = a();
: # got ('Hi', 42) here
作者: herculus6502 (金麟豈是池中物)   2020-04-15 12:12:00
剛好在 python 遇到相同問題,推

Links booklink

Contact Us: admin [ a t ] ucptt.com