16

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

Perl5 风格的反引号似乎不起作用:

> my $results = `ls`;
Confused at line 1, near "my $results"

概要 16记录了run方法,但这会返回退出状态而不是 stdout 的输出。

我正在使用 Rakudo 实现(rakudo-star-2010.12)。

4

3 回答 3

18

请改用 qqx 或 qx,例如:

> my $results = qqx{ls};

Larry Wall在邮件列表中回答了一个相同的问题:

[...]

:用什么代替反引号或 qx{} ?

qqx[] 或 qq:x[] 将是完全等价的。qx[] 或 q:x[] 与单引号语义相同。(可能没有用于该目的的反引号,因为我们将 ` 保留用于用户定义的内容,并且因为在许多字体中很难从单引号中分辨出反引号。)

于 2011-01-10T05:00:27.020 回答
5

截至 2015 年 1 月:

最近验证的教程页面

最近的 Perl 6 出现页面

最近关于合理化什么得到什么返回的讨论

于 2015-01-13T20:50:43.907 回答
5

这也可以使用run()以下out参数安全地完成(无需接触外壳):

my $proc = run 'ls', q!/tmp/"This" is an ugly name, isn't it?/!, :out;
my $output = $proc.out.slurp-rest;

更多细节可在Proc课堂上找到。

于 2015-12-27T20:19:47.550 回答