如何在perl6中执行外部命令并捕获其输出?

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 []与单引号语义相同.(可能没有用于此目的的反引号,因为我们为用户定义的东西保留`,并且因为很多字体的单引号在视觉上难以辨别反引号.)


Dea*_*evy 5

这也可以安全地完成(不接触壳)使用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课程中提供了更多详细信息。