如何避免在Perl条件判断链中重复使用同一变量?
几种简化方式,避免重复引用
$size 1. 用given块复用主题变量
你的代码语法属于Raku(原Perl 6),可以用given把$size设为当前主题变量$_,后续判断无需重复书写变量名:
my $size = "123B"; given $size { say "OK" if ~~ Str && .ends-with("B") && .chop >= 0; }
这里~~ Str默认使用主题变量$_,.ends-with和.chop也直接调用主题变量的方法,完全省略了$size的重复引用。
2. 正则表达式一次性搞定所有判断
你的三个条件本质是验证字符串格式:非负整数后缀B。用正则可以一步到位,代码更简洁直观:
my $size = "123B"; say "OK" if $size ~~ /^\d+B$/;
这个正则/^\d+B$/会匹配从开头到结尾由数字+字母B组成的字符串,自动满足所有原条件:
- 是字符串类型(正则仅匹配字符串)
- 以
B结尾 - 去掉
B后是非负数字(\d匹配0-9的数字)
关于Junctions的说明
Junctions(比如all)在这里并不适用,因为你的条件存在依赖关系:只有确认$size是字符串且以B结尾后,调用.chop才不会出错。Junctions是并行计算所有条件的,可能会在$size不是字符串时尝试调用.ends-with,触发运行时错误。Junctions更适合无依赖的并行判断场景,比如$x ~~ all(1..10, Int)这类需求。
内容的提问来源于stack exchange,提问作者Brass P.
相关产品推荐
相关产品推荐

