Вы заново изобретаете колесо .
use String::ShellQuote qw( shell_quote );
my $cmd = shell_quote('./script.pl', $env->{arguments});
my $output = `$cmd`;
В качестве альтернативы, есть ряд IPC :: модулей, которые вы можете использовать вместо qx
.Например,
use IPC::System::Simple qw( capturex );
my $output = capturex('./script.pl', $env->{arguments});
Поскольку у вас есть хотя бы один аргумент, вы также можете использовать следующее:
my $output = '';
open(my $pipe, '-|', './script.pl', $env->{arguments});
while (<$pipe>) {
$output .= $_;
}
close($pipe);
Обратите внимание, что текущий каталог не обязательно является каталогом, которыйсодержит скрипт, который выполняетсяЕсли вы хотите выполнить script.pl
, который находится в том же каталоге, что и текущий выполняемый скрипт, вам нужно внести следующие изменения:
Добавить
use FindBin qw( $RealBin );
и заменить
'./script.pl'
с
"$RealBin/script.pl"