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 / 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

于 2012-04-18T14:26:20.283 に答える