Вызовите функцию командной строки в Perl и получите вывод в виде String
Каков наилучший / самый простой способ выполнить функцию командной строки в Perl, чтобы я мог получить вывод в виде строки?
Что я на самом деле пытаюсь сделать, так это вызвать Java-программу из функции PL/Perl в PostgreSQL, и я хочу получить выходную строку, однако в данный момент она просто возвращает 0.
Вот простой кусок кода, чтобы объяснить, что я после:
CREATE OR REPLACE FUNCTION perl_func()
RETURNS character varying AS
$BODY$
return system("java -version");
$BODY$
LANGUAGE plperlu VOLATILE
COST 100;
1 ответ
Вы можете использовать backticks. Цитировать из perldoc perlop
:
* QX / STRING /
* `STRING`
Строка, которая (возможно) интерполируется и затем выполняется как системная команда с /bin/sh или ее эквивалентом. Подстановочные знаки, трубы и перенаправления будут выполнены. Собранный стандартный вывод команды возвращается; стандартная ошибка не изменяется В скалярном контексте он возвращается как одна (потенциально многострочная) строка или undef, если команда не выполнена. В контексте списка возвращает список строк (однако вы определили строки с помощью $/ или $INPUT_RECORD_SEPARATOR) или пустой список, если команда не выполнена.
Вы не можете использовать system
для этого, поскольку он просто возвращает возвращаемое значение аргумента (при запуске в качестве команды оболочки). Это должно работать:
CREATE OR REPLACE FUNCTION perl_func()
RETURNS character varying AS
$BODY$
my $output=`java -version`;
chomp($output);
return $output;
$BODY$
LANGUAGE plperlu VOLATILE
COST 100;
Обратите внимание, что выходные данные команды с обратным символом обычно включают завершающий символ новой строки, поэтому часто бывает полезно избавиться от этого с помощью chomp
,