【发布时间】:2011-01-10 04:48:12
【问题描述】:
如何在 Perl6 中执行外部命令并捕获其输出?
Perl5 样式的反引号似乎不起作用:
> my $results = `ls`;
Confused at line 1, near "my $results"
Synopsis 16 记录了 run 方法,但这会返回退出状态而不是 stdout 的输出。
我正在使用 Rakudo 实现 (rakudo-star-2010.12)。
【问题讨论】:
如何在 Perl6 中执行外部命令并捕获其输出?
Perl5 样式的反引号似乎不起作用:
> my $results = `ls`;
Confused at line 1, near "my $results"
Synopsis 16 记录了 run 方法,但这会返回退出状态而不是 stdout 的输出。
我正在使用 Rakudo 实现 (rakudo-star-2010.12)。
【问题讨论】:
使用 qqx 或 qx 代替,例如:
> my $results = qqx{ls};
Larry Wall answered 邮件列表上的一个等效问题:
[...]
:用什么代替反引号或 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;
更多详情请见Proc class。
【讨论】: