Как я могу запускать внешние программы, используя Perl 6? (например, как "система" в Perl 5)
Я могу использовать system
в Perl 5 запускать внешние программы. Мне нравится думать о system
как миниатюрная "командная строка Linux" внутри Perl. Тем не менее, я не могу найти документацию для system
в Perl 6. Что является эквивалентом?
2 ответа
В дополнение к использованию shell
или же run
, которые заменяют system
из Perl 5 вы также можете использовать NativeCall
чтобы вызвать libc system
функция.
На моей Windows-коробке это выглядит так:
use NativeCall;
sub system(Str --> int32) is native("msvcr110.dll") { * };
system("echo 42");
Perl6 на самом деле имеет две команды, которые заменяют system
из Perl 5.
В Perl6 shell
передает свой аргумент в оболочку, похожую на Perl 5 system
когда у него есть один аргумент, который содержит метасимволы.
В 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 на тему "запуск внешних программ".