Я могу использовать system
в Perl 5 для запуска внешних программ. Мне нравится думать о system
как о миниатюрной «командной строке Linux» внутри Perl. Однако я не могу найти документацию для system
в Perl 6. Что эквивалентно?
Как я могу запускать внешние программы с помощью Perl 6? (например, подобная система в Perl 5)
Ответы (2)
Помимо использования shell
или _ 2_, которые заменяют system
из Perl 5, вы также можете использовать NativeCall
для вызова функции libc system
.
На моем компьютере с Windows это выглядит так:
use NativeCall;
sub system(Str --> int32) is native("msvcr110.dll") { * };
system("echo 42");
person
Christoph
schedule
10.04.2015
Это
system
в основном то же самое, что и версия Perl 5?
- person Christopher Bottoms; 10.04.2015
Если вам нужно указать
"msvcr110.dll"
, я полагаю, это не очень переносимо. Можете ли вы передать ему несколько аргументов, например system("echo" "42")
в Perl 5? (Я знаю, что Windows не обрабатывает аргументы командной строки так же, как Unix.)
- person Keith Thompson; 10.04.2015
@ChristopherBottoms: нет, это из стандартной библиотеки C; чтобы получить Perl5, вам понадобится Inline :: Perl5
- person Christoph; 11.04.2015
@KeithThompson: нет,
system
ожидает единственный аргумент - в Windows вам понадобится функция _ 2_ family, чтобы избежать обработки
- person Christoph; 11.04.2015
Я искал
shell
и run
, но упоминание NativeCall
добавляет еще одно измерение к взаимодействию с операционной системой, которое я не рассматривал. Поэтому я отмечаю это как принятый ответ. Я по-прежнему рекомендую читателям также посмотреть мой ответ для быстрого shell
и run
обзора и примера.
- person Christopher Bottoms; 28.04.2015
В Perl6 фактически есть две команды, которые заменяют system
из Perl 5.
В Perl6 shell
передает свой аргумент оболочке, аналогично system
в Perl 5, когда он имеет один аргумент, содержащий метасимволы.
В Perl6 run
пытается избежать использования оболочки. Он принимает свой первый аргумент как команду, а остальные аргументы как аргументы этой команды, аналогично Perl 5 system
, когда он имеет несколько аргументов.
Например:
shell('ls > file.log.txt'); # Capture output from ls (shell does all the parsing, etc)
run('ls','-l','-r','-t'); # Run ls with -l, -r, and -t flags
run('ls','-lrt'); # Ditto
См. Также это 2014 Perl 6 Advent сообщение о "запущенных внешних программах".
person
Christopher Bottoms
schedule
09.04.2015