2

出力をxmlで返す複数のスクリプトを作成しました。各スクリプトのxmlから素敵なテーブルを出力するxslファイルがあります。ただし、これらの複数のスクリプトをすべて呼び出して 1 つの出力を作成するスクリプトを作成する必要があります。

これはできますか?もしそうなら、誰かがこれを行う方法の例を教えてください。

  #Example Script 1

use strict;
use warnings;
use Data::Dumper;
use XML::Simple;
use Getopt::Long;

my $output = '';
my $debug = 0;
my $path;
GetOptions('path=s' => \$path,'output=s' => \$output, 'debug=i' => \$d
+ebug);

if($output eq ''){
    die ("parameter --output=s is missing");
}     
open my $xmloutput, ">", $outputFile or die "can not open $outputFile 
+";
 print $xmloutput "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<?xml-s
+tylesheet type=\"text/xsl\" href=\"book.xsl\"?>\n<Books>\n";

my $parser = new XML::Simple;
my $data = $parser->XMLin("$path");
print $xmloutput " <bookDetails> \n";
print $xmloutput "  <bookName>$data</bookName> \n";
print $xmloutput " </bookDetails> \n";
print $xmloutput " </Books> \n";
close $xmloutput;

例 2

EXAMPLE 2
use strict;
use warnings;
use Data::Dumper;
use XML::Simple;
use Getopt::Long;

my $output = '';
my $debug = 0;
my $path;
GetOptions('path=s' => \$path,'output=s' => \$output, 'debug=i' => \$d
+ebug);

if($output eq ''){
    die ("parameter --output=s is missing");
}     
open my $xmloutput, ">", $outputFile or die "can not open $outputFile 
+";
 print $xmloutput "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<?xml-s
+tylesheet type=\"text/xsl\" href=\"Piano.xsl\"?>\n<Piano>\n";

my $parser = new XML::Simple;
my $data = $parser->XMLin("$path");
print $xmloutput " <PianoDetails> \n";
print $xmloutput "  <PianoName>$data</PianoName> \n";
print $xmloutput " </PianoDetails> \n";
print $xmloutput " </Piano> \n";
close $xmloutput;
4

3 に答える 3

1

他の各ツールを順番に実行する制御スクリプトを作成します。

サブツールが XML の再フォーマットされた出力を書き込む場合、STDOUTそれをキャプチャして、制御スクリプトでパイプ オープン構文を使用して再フォーマットできます。ファイルを保存する場合は、1 つずつ収集し、マッサージして結合し、クリーンアップする必要があります。

于 2012-06-14T17:54:21.227 に答える
0

システムコールを使用する必要はなく、 requireを使用して複数の perl スクリプトを順番に実行できます。次のような方法で実行できます。

my @scripts_to_run = ('first.pl', 'second.pl', 'third.pl');
for my $script (@scripts_to_run) {
  require $script;
}

...これは実際には1つのスクリプトで実行する必要があることを教えてくれますが、異なるパラメーターで呼び出すだけです。) そのスクリプトをモジュールとして保存し、コンパイル時に一度だけインクルードしてから、任意のパラメーター (おそらくファイル名) を使用してモジュール メソッドとして呼び出すことができますuse

于 2012-06-14T17:58:23.330 に答える
0

バッククォート (`) を使用する必要があるようです。

my $xmlout1 = `perl xmlscript1.pl`;
my $xmlout2 = `perl xmlscript2.pl`;
my $xmlout3 = `perl xmlscript3.pl`;

于 2012-06-14T17:53:15.977 に答える