запустить perl -e изнутри скрипта perl в windows - PullRequest
3 голосов
/ 16 августа 2010

Мне нужно выполнить следующую команду изнутри скрипта Perl в Windows. Код не может быть проще, чем этот:

#! C:\Perl\bin\perl

perl -e "print qq(Hello)";

Я сохраняю этот файл как test.pl. Я открываю командную строку в Windows и запускаю следующую команду из каталога c:\Per\bin. Когда я запускаю его как perl test.pl, я получаю следующий результат:

C:\Perl\bin>perl test.pl
syntax error at test.pl line 3, near ""perl -e "print"
Execution of test.pl aborted due to compilation errors.

Как я могу это исправить? Если я просто запускаю perl -e из командной строки (то есть, не находясь внутри файла), это прекрасно работает.

Ответы [ 5 ]

4 голосов
/ 16 августа 2010

Файл test.pl должен содержать:

print qq(Hello);
2 голосов
/ 16 августа 2010

Чтобы запустить другую программу из вашей Perl-программы, используйте оператор system, который имеет замечательную функцию для обхода анализа аргументов командной оболочки.

Если в LIST имеется более одного аргумента или если LIST является массивом с более чем одним значением, запускается программа, заданная первым элементом списка, с аргументами, заданными остальной частью списка. Если есть только один скалярный аргумент, этот аргумент проверяется на наличие метасимволов оболочки, и, если они есть, весь аргумент передается в системную командную оболочку для анализа…

Например:

#! perl

system("perl", "-le", "print qq(Hello)") == 0
  or warn "$0: perl exited " . ($? >> 8);

Помните, что system запускает команду с выводом на стандартный вывод. Если вы хотите захватить вывод, сделайте это, как в

open my $fh, "-|", "perl", "-le", "print qq(Hello)"
  or die "$0: could not start perl: $!";

while (<$fh>) {
  print "got: $_";
}

close $fh or warn "$0: close: $!";

Как и в случае system, открытие команды, указанной как многоэлементный список, обходит оболочку.

2 голосов
/ 16 августа 2010

Почему вы хотите запустить Perl-код с perl -e …?Просто вставьте фактический код в вашу программу.

Если, с другой стороны, вы хотите запустить внешнюю команду из вашей программы, то ответ зависит от того, что вы хотите сделать с вводом / выводом/ или код выхода вашей программы.Посмотрите на system , qx * ​​1007 * и open .

1 голос
/ 16 августа 2010

Не знаю, зачем вам это нужно, но:

#!C:\Perl\bin\perl

`perl -e "print qq(Hello)"`;
0 голосов
/ 16 августа 2010

Почему бы не использовать eval ?

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