我在perl中编写了三个小程序。 我有Program1.pl,然后是Program2.pl(它使用Program1.pl生成的输出作为输入)然后我有Program3.pl(它使用Program2.pl生成的输出作为输入)。
现在我想编写一个“调用”所有三个程序的程序,这样用户只需要运行一个程序,即MainProgram.pl。
我该怎么做?
提前致谢! :)
答案 0 :(得分:3)
我取决于您对 combine 的意思,但如果您可以这样做,例如,创建一个管道:
open(PIPE, "perl Program1.pl | perl Program2.pl | perl Prograp3.pl |") or die "can't create pipe: $!";
while(<PIPE>){
print;
}
答案 1 :(得分:0)
听起来这里有一点设计问题;将数据从sub传递给sub,或者使用OO结构,而不是将一个脚本传递到另一个脚本然后传递到另一个脚本中是有意义的
答案 2 :(得分:0)
除非人类需要“Output [n]”文件,否则只需将结果推送到数组中,然后在后续步骤中将数组读入哈希值。这仅适用于项目数量适合内存的情况。如果您正在处理千兆字节的数据,则可能需要中间文件。
push是一个数组运算符。
管道不能轻易使用,因为您有多个输出,并且输出上有多个条件。
答案 3 :(得分: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
}
但老实说,听起来你只需要编写一个新脚本来完成你需要的所有逻辑,并且只需要删除其他脚本。不写所有那些“临时”文件只是为了再次读取它们以继续处理会更简单。你可以将哈希和数组传递给子程序并让它们返回哈希值或数组,或者只是让它们修改你传入的数据(如果传入引用)。
哦,并且提到使用管道管道仅在采用一个程序的标准输出和/或标准错误并将其发送到标准输入到另一个程序时才有用。既然你说你的脚本写入文件并从文件中读取,那么它们不会打印到标准输出,也不会从标准读取。因此将它们组合在一起不会让你受益,只需按顺序调用每个。你也可以这样在线执行它们(来自bash shell):
$ Program1.pl && Program2.pl && Program3.pl