# command with arguments
my $proc = Proc::Async.new('whoami');
# subscribe to new output from out and err handles:
$proc.stdout.tap(-> $v { print "Username: $v" }, quit => { say 'caught exception ' ~ .^name });
#$proc.stderr.tap(-> $v { print "Error: $v" });
#stdout可以定制输出内容格式, 默认情况下当.start后也会输出
say "Starting...";
my $promise = $proc.start;
#
# wait for the external program to terminate
await $promise;
#await 子例程等待一个 promise。
#如果那个 promise 是被 保留 的, await 会获取到返回值。
#如果那个 promise 是被 破坏 的, await 会获取到抛出异常。
#kept就会执行上面的stdout
#broken就会执行stderr
#quit是设置异常后的输出
say "Done.";