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