在Perl中执行命令行函数的最佳/最简单方法是什么,这样我可以将输出作为String?
我实际上要做的是从PostgreSQL中的PL / Perl函数中调用Java程序,我想要输出String,但此刻它似乎只是返回0。
这是一段简单的代码来解释我的目标:
CREATE OR REPLACE FUNCTION perl_func()
RETURNS character varying AS
$BODY$
return system("java -version");
$BODY$
LANGUAGE plperlu VOLATILE
COST 100;
答案 0 :(得分:3)
你可以使用反引号。引自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;
请注意,反引号命令的输出通常包含一个尾随换行符,因此通过chomp
删除它通常很有用。