操作符§

请参阅上下文中的主要文档 中缀 orelse 以了解中缀 orelse

orelse 操作符类似于 infix //,但优先级较低,并且 $_ 别名。

返回第一个已定义的参数,否则返回最后一个参数。最后一个参数按原样返回,而根本不会检查其是否已定义。短路。左侧的结果绑定到右侧的 $_,或者如果右侧是 Callable,则作为参数传递,其 count 必须为 01

此操作符对于处理由例程返回的 Failure 非常有用,因为预期值通常是 defined,而 Failure 永远不会

sub meows { ++$ < 4 ?? fail 'out of meows!' !! '🐱' }
 
sub meows-processor1 { meows() orelse .return } # return handled Failure 
sub meows-processor2 { meows() orelse fail $_ } # return re-armed Failure 
sub meows-processor3 {
    # Use non-Failure output, or else print a message that stuff's wrong 
    meows() andthen .say orelse something's wrong.say;
}
 
say "{.^name}{.handled}"  # OUTPUT: «Failure, True␤» 
    given meows-processor1;
say "{.^name}{.handled}"  # OUTPUT: «Failure, False␤» 
    given meows-processor2;
meows-processor3;           # OUTPUT: «something's wrong␤» 
meows-processor3;           # OUTPUT: «🐱␤»