Как выполнить внешнюю команду и захватить его вывод в Perl6?

StackOverflow https://stackoverflow.com/questions/4643753

  •  09-10-2019
  •  | 
  •  

Вопрос

Как я могу выполнить внешнюю команду и захватить его вывод в Perl6?

Back-Ticks Perl5 Back-Ticks не работает:

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

Синопсис 16. документы бегать Способ, но это возвращает статус выхода, а не вывод от stdout.

Я использую реализацию Rakudo (Rakudo-Star-2010.12).

Это было полезно?

Решение

Используйте QQX или QX вместо, например:

> my $results = qqx{ls};

Ларри Стена ответил Эквивалентный вопрос в списке рассылки:

[...]

: Что заменяет отзыв или Qx {}?

QQX [] или QQ: X [] будет точным эквивалентом. QX [] или Q: X [] будет одинаковым с одноцитальной семантикой. (Вероятно, нет никаких отзывов для этой цели, поскольку мы бронируем «для пользовательских материалов, и потому, что backticks визуально трудно сказать от одной цитаты во многих шрифтах.)

Другие советы

Это также может быть сделано безопасно (не касаясь оболочки), используя run() с out Параметр:

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

Подробнее, доступные в Proc сорт.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top