with orwith without
with
语句就像 if
但是是为了测试是否定义而非真假。此外, 它主题化了条件, 这很像 given
:
with "abc".index("a") { .say } # print 0
代替 elsif
, orwith
用于把是否定义的测试链接起来:
# The below code says "Found a at 0"
my $s = "abc";
with $s.index("a") { say "Found a at $_" }
orwith $s.index("b") { say "Found b at $_" }
orwith $s.index("c") { say "Found c at $_" }
else { say "Didn't find a, b or c" }
你可以混合基于 if
的从句和基于 with
的从句:
# This says "Yes"
if 0 { say "No" } orwith Nil { say "No" } orwith 0 { say "Yes" };
至于 unless
, 你可以使用 without
来检测未定义(undefinedness), 但是你不可以添加 else
从句:
my $answer = Any;
without $answer { warn "Got: $_" }
我们还有 with
和 without
语句修饰符:
my $answer = (Any, True).roll;
say 42 with $answer;
warn "undefined answer" without $answer;
测试下:
> my $answer = (Any, True).roll;
True
> say 42 with $answer;
42
> my $answer = (Any, True).roll;
(Any)
> say 42 with $answer;
()