Чтобы запустить другую программу из вашей 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
, открытие команды, указанной как многоэлементный список, обходит оболочку.