关于怎样定义例程和使用例程, 请参阅 Sub 。
控制例程是能改变程序流的例程, 它可能会返回一个值。
定义为:
sub exit(Int() $status = 0)
使用返回码 $status
退出当前进程,如果未指定值,则返回码为 0。退出值 ($status
),当不同于零时,必须从捕获它的进程(例如,shell)进行适当的计算; 它是从Main 返回不同于零的退出代码的唯一方法。
exit
应该作为最后的手段用于向父进程发出关于退出代码不等于零的信号,而不是异常地终止方法或 sub, 使用 exceptions 代替。
定义为:
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 : 1Second : 2Second : 3No More»
传递给 done
命名参数的块将在 supply
块中调用结束 (done
) 时运行。
定义为:
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" });