什么是执行Perl中的一个命令行功能的最佳/最简单的方法,这样我可以得到的输出作为一个字符串?
什么实际上,我试图做的是从PostgreSQL中PL / Perl函数中调用Java程序,我想输出字符串,但目前它似乎只是返回0。
下面是一段简单的代码来解释我后:
CREATE OR REPLACE FUNCTION perl_func()
RETURNS character varying AS
$BODY$
return system("java -version");
$BODY$
LANGUAGE plperlu VOLATILE
COST 100;
你可以使用反引号。 从引用perldoc perlop
:
* QX / STRING /
*`STRING`
一个字符串,它是(可能)内插,然后与/ bin / sh的或其等效系统命令执行。 壳牌通配符,管道和重定向将荣幸。 该命令的收集标准输出被返回; 标准错误是不受影响。 在标量上下文,它回来作为一个单一的(潜在的多线)字符串,或者为undef如果命令失败。 在列表环境中,返回线路(但是你定义线/使用$或INPUT_RECORD_SEPARATOR $)列表,或者一个空列表,如果该命令失败。
不能使用system
这一点,因为它只是返回的参数(当作为shell命令运行)的返回值。 这应该工作:
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;
请注意,backticked命令的输出通常包括结尾的新行,所以这是可以得到通过摆脱这种chomp
。