Как я могу запустить внешнюю программу на Perl? - PullRequest
0 голосов
/ 07 октября 2009

Я хочу выполнить программу на C, используя скрипт Perl. Какие бы входные данные ни вводились в исполняемый файл C вручную, они должны быть переданы моей программой.

Давайте возьмем простую программу, которая вводит два номера. и печатает сумму этого. Значения должны быть предоставлены скриптом Perl.

Пожалуйста, проведите меня через учебник, где я могу достичь того же.

Ответы [ 3 ]

5 голосов
/ 07 октября 2009

Что ж, если вы только учитесь запускать внешние программы на Perl - сделайте себе одолжение и забудьте о ``.

Проблема с `` заключается в том, что вы выполняете строку с аргументами в ней - поэтому ее необходимо проанализировать. И это может привести к проблемам, когда параметры предоставляются пользователем.

Если вы на 100% уверены, что имеете полный контроль над параметрами и именем команды - вы можете использовать ``, но для любой другой ситуации - рассмотрите возможность использования IPC :: Run .

Это немного сложнее, но единственный факт, что он не требует разбор аргументов, гораздо лучше. Кроме того, у вас есть полный контроль над stdin, stdout и stderr исполняемой программы, включая присоединение к ним обратных вызовов!

5 голосов
/ 07 октября 2009

Используйте функцию system :

system "my-c-program 1 2";

Если вы хотите захватить выходные данные из программы на C в вашем Perl-скрипте, используйте обратные клавиши или оператор qx// :

my $output = `my-c-program 1 2`;

Он запускает my-c-program 1 2 и записывает стандартный вывод в новую переменную $output.

0 голосов
/ 07 октября 2009

Возможно, вы используете механизм цитирования обратных тегов, который выполняет внешнюю программу и возвращает ее стандартный вывод в виде строки. например

$date = `date`
print $date;

напечатало бы что-то вроде «ср 7 окт 12:50:33 CEST 2009» в unix. Тем не менее, аргументы должны быть экранированы в целях безопасности, и это может быть непросто в определенных сценариях - в большинстве случаев портить можно.

Я рекомендую всем новичкам обращаться непосредственно к команде «system», пока они не узнают о последствиях обратных галочек для безопасности - в этом случае вам, вероятно, следует принять совет @Dave Hinton

Для продвинутой магии вы должны прочитать perlipc perldoc .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...