3

在 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;
4

1 回答 1

3

您可以使用反引号。引自perldoc perlop

*qx/字符串/

*`字符串`

一个字符串,它(可能)被插值,然后作为系统命令使用 /bin/sh 或其等效命令执行。将接受 Shell 通配符、管道和重定向。返回收集到的命令标准输出;标准误差不受影响。在标量上下文中,它以单个(可能是多行)字符串的形式返回,如果命令失败,则返回 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

于 2012-04-18T14:26:20.283 回答