Как выполнить внешнюю команду и перехватить ее вывод в perl6? - PullRequest
13 голосов
/ 10 января 2011

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

Бэк-тики в стиле Perl5 не работают:

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

Сводка 16 описывает метод run , но он возвращает состояние выхода, а не вывод из stdout.

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

Ответы [ 3 ]

16 голосов
/ 10 января 2011

Используйте взамен qqx или qx, например ::100100

> my $results = qqx{ls};

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

[...]

: Что заменяет backtick или qx {}?

qqx [] или qq: x [] будет точным эквивалент. qx [] или q: x [] будет то же самое с семантикой в ​​одинарных кавычках. (Вероятно, нет никаких спинок для эта цель, так как мы бронируем для пользовательских вещей, и потому что визуально затруднительно сказать из одинарных кавычек во многих шрифты.)

4 голосов
/ 27 декабря 2015

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

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

Более подробная информация доступна в Proc классе .

...