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

Другие вопросы по тегам