Как выполнить внешнюю команду и захватить его вывод в Perl6?
Вопрос
Как я могу выполнить внешнюю команду и захватить его вывод в 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
сорт.