如何从一个perl脚本调用多个perl脚本并生成输出?

时间:2012-06-14 17:48:09

标签: xml perl xslt

我编写了一个多脚本,它以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;

3 个答案:

答案 0 :(得分:1)

编写一个控制脚本,按顺序运行其他每个工具。

如果子工具将其重新格式化的XML输出写入STDOUT,您可以使用pipe open语法捕获它并在控制脚本中重新格式化。如果他们保存文件,你需要收集每个文件,按摩并组合它然后清理。

答案 1 :(得分:0)

听起来你需要使用反引号(`)。

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

答案 2 :(得分:0)

您可以使用require按顺序运行多个perl脚本,无需使用系统调用。可以这样做:

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

...虽然有些东西告诉我这应该是用一个脚本实际完成的,只是用不同的参数调用。 )该脚本可以保存为模块,在编译时只包含一次use,然后作为模块方法调用,无论你喜欢什么样的params(文件名)。 / p>