在Perl中调用命令行函数并以String形式输出

时间:2012-04-18 14:21:56

标签: perl postgresql command-line plperl

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

1 个答案:

答案 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删除它通常很有用。