关于怎样定义例程和使用例程, 请参阅 Sub 。
控制例程
控制例程是能改变程序流的例程, 它可能会返回一个值。
sub exit
定义为:
sub exit(Int() $status = 0)
使用返回码 $status
退出当前进程,如果未指定值,则返回码为 0。退出值 ($status
),当不同于零时,必须从捕获它的进程(例如,shell)进行适当的计算; 它是从Main 返回不同于零的退出代码的唯一方法。
exit
防止 LEAVE phaser 被执行, 但是它会在 &*EXIT 变量中运行。
exit
应该作为最后的手段用于向父进程发出关于退出代码不等于零的信号,而不是异常地终止方法或 sub, 使用 exceptions 代替。
done
定义为:
sub done(--> Nil)
如果用在任何 supply 或 react 块儿之外, 则抛出异常: done without supply or react
。在 Supply 块儿里面, 它会指示该 supply 不会再发出任何东西. 还请参阅 documentation on method done.
my $supply = supply {
for 1 .. 3 {
emit($_);
}
done;
}
$supply.tap( -> $v { say "Second : $v" }, done => { say "No more" });
# OUTPUT: OUTPUT: «Second : 1
Second : 2
Second : 3
No More
»
传递给 done
命名参数的块将在 supply
块中调用结束 (done
) 时运行。
emit
定义为:
sub emit(\value --> Nil)
如果在任何 supply 或 react 块儿外面使用 emit
, 则抛出异常 emit without supply or react
. 在 Supply 块儿里面, 它会添加一条消息给 stream 流。
my $supply = supply {
for 1 .. 10 {
emit($_);
}
}
$supply.tap( -> $v { say "First : $v" });
还请参阅 the page for emit methods.
undefine
定义为:
multi sub undefine(Mu \x)
multi sub undefine(Array \x)
multi sub undefine(Hash \x)
在 6.d 中被废弃, 将在 6.e 中移除。 对于 Array 和 Hash, 它会变得和赋值为 Empty 相等; 对于其它任何东西, 它会和赋值为 Nil 相等, 建议使用它。