Re: [情報] 作了個 Return::Deep 模組
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
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.171.152.79 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Perl/M.1586869827.A.4FE.html
※ 編輯: CindyLinz (1.171.152.79 臺灣), 04/14/2020 21:11:58
推
04/15 12:12,
4年前
, 1F
04/15 12:12, 1F
討論串 (同標題文章)
Perl 近期熱門文章
PTT數位生活區 即時熱門文章