mat*_*tbh 14 process rakudo perl6 raku
如何在Perl6中执行外部命令并捕获其输出?
Perl5风格的后退功能似乎不起作用:
> my $results = `ls`;
Confused at line 1, near "my $results"
Run Code Online (Sandbox Code Playgroud)
概要16记录了run方法,但是它返回退出状态而不是stdout的输出.
我正在使用Rakudo实现(rakudo-star-2010.12).
mat*_*tbh 16
请改用qqx或qx,例如:
> my $results = qqx{ls};
Run Code Online (Sandbox Code Playgroud)
Larry Wall 在邮件列表上回答了同样的问题:
[...]
:什么取代反引号或qx {}?
qqx []或qq:x []将完全等效.qx []或q:x []与单引号语义相同.(可能没有用于此目的的反引号,因为我们为用户定义的东西保留`,并且因为很多字体的单引号在视觉上难以辨别反引号.)
这也可以安全地完成(不接触壳)使用run()与out参数:
my $proc = run 'ls', q!/tmp/"This" is an ugly name, isn't it?/!, :out;
my $output = $proc.out.slurp-rest;
Run Code Online (Sandbox Code Playgroud)
Proc课程中提供了更多详细信息。