我用perl写了三个小程序。我有 Program1.pl,然后是 Program2.pl(使用 Program1.pl 生成的输出作为输入),然后是 Program3.pl(使用 Program2.pl 生成的输出作为输入)。
现在我想编写一个“调用”所有三个程序的程序,这样用户只需运行一个程序,即 MainProgram.pl。
我该怎么做呢?
提前致谢!:)
我用perl写了三个小程序。我有 Program1.pl,然后是 Program2.pl(使用 Program1.pl 生成的输出作为输入),然后是 Program3.pl(使用 Program2.pl 生成的输出作为输入)。
现在我想编写一个“调用”所有三个程序的程序,这样用户只需运行一个程序,即 MainProgram.pl。
我该怎么做呢?
提前致谢!:)
我取决于您对combine的含义是什么,但如果您能做到这一点,例如,创建一个管道:
open(PIPE, "perl Program1.pl | perl Program2.pl | perl Prograp3.pl |") or die "can't create pipe: $!";
while(<PIPE>){
print;
}
根据您想要更改代码的程度,它可能非常简单,例如:
#!/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
听起来这里有点设计问题;将数据从 sub 传递到 sub,或者使用 OO 结构,而不是将一个脚本传递到另一个脚本然后传递到另一个脚本,这将是有意义的
除非人类需要“输出 [n]”文件,否则您只需将结果推送到数组中,然后在后续步骤中将数组读入哈希。这仅适用于项目数量适合内存的情况。如果您正在处理千兆字节的数据,则可能需要中间文件。
push 是一个数组运算符。
管道不能轻易使用,因为您有多个输出,并且输出有多个条件。