2

我编写了一个以 xml 格式返回输出的多个脚本。我有 xsl 文件,它将为每个脚本从 xml 打印出一个漂亮的表。但是我需要编写一个脚本,在其中调用所有这些多个脚本并创建一个输出。?

这可以做到吗?如果可以的话,请给我一个如何做到这一点的例子。

  #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您可以捕获它并使用管道打开语法在您的控制脚本中重新格式化它。如果他们保存文件,您需要收集每个文件,按摩并合并,然后清理。

于 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;
}

...虽然有些东西告诉我这实际上应该用一个脚本来完成,只是用不同的参数调用。) 该脚本可以保存为模块,在编译时只包含一次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 回答