0

我用perl写了三个小程序。我有 Program1.pl,然后是 Program2.pl(使用 Program1.pl 生成的输出作为输入),然后是 Program3.pl(使用 Program2.pl 生成的输出作为输入)。

现在我想编写一个“调用”所有三个程序的程序,这样用户只需运行一个程序,即 MainProgram.pl。

我该怎么做呢?

提前致谢!:)

4

4 回答 4

3

我取决于您对combine的含义是什么,但如果您能做到这一点,例如,创建一个管道:

open(PIPE, "perl Program1.pl | perl Program2.pl | perl Prograp3.pl |") or die "can't create pipe: $!";
while(<PIPE>){
  print;
}
于 2012-07-01T15:16:20.877 回答
0

根据您想要更改代码的程度,它可能非常简单,例如:

#!/usr/bin/perl

system('perl Program1.pl');
system('perl Program2.pl');
system('perl Program3.pl');

或者,您可以将脚本重写为单个脚本,其中包含要执行的每个部分的子例程。就像是:

#!/usr/bin/perl

part_A();
part_B();
part_C();
exit;

sub part_A {
    # code from Program1.pl goes in here
}

sub part_B {
    # code from Program2.pl goes here
}

sub part_C {
    # code from Program3.pl here
}

但老实说,听起来您只需要编写一个新脚本来执行您需要的所有逻辑,然后 git 摆脱其他脚本。不写所有这些“临时”文件只是为了再次读取它们以继续处理会更简单。您可以将散列和数组传递到子例程中并让它们返回散列或数组,或者只是让它们修改您传入的那些(如果您传入引用)。

哦,提到使用管道 - 管道仅在取出一个程序的标准输出和/或标准错误并将其发送到另一个程序的标准时才有用。并且由于您说您的脚本写入文件并从文件中读取,那么它们不会打印到标准输出,也不会从标准输入读取。因此,将它们连接在一起不会对您有任何好处,而不仅仅是按顺序调用每个脚本。您也可以像这样在线执行它们(来自 bash shell):

$ Program1.pl && Program2.pl && Program3.pl
于 2012-07-02T18:33:53.287 回答
0

听起来这里有点设计问题;将数据从 sub 传递到 sub,或者使用 OO 结构,而不是将一个脚本传递到另一个脚本然后传递到另一个脚本,这将是有意义的

于 2012-07-01T15:17:48.627 回答
0

除非人类需要“输出 [n]”文件,否则您只需将结果推送到数组中,然后在后续步骤中将数组读入哈希。这仅适用于项目数量适合内存的情况。如果您正在处理千兆字节的数据,则可能需要中间文件。

push 是一个数组运算符。

管道不能轻易使用,因为您有多个输出,并且输出有多个条件。

于 2012-07-02T17:42:21.253 回答