perl管道中的可编程参数

perl管道中的可编程参数,perl,pipe,Perl,Pipe,我正在逐渐地沿着perl学习曲线前进(感谢这个非常有用的站点的贡献者),但我正在努力解决这个特殊问题 我正在构建一个perl实用程序,它使用三个(c++)第三方程序。通常情况下,这些都会运行:一个$file_列表| B-args | C$file_out 当进程A读取多个文件时,进程B修改每个单独的文件,进程C收集管道中的所有输入文件并生成一个输出文件,空输入文件表示输入流的结束 输入文件很大(ish),大约100Mb,数量大约为10。这些进程是CPU密集型的,整个进程每天需要应用于数千组文件,

我正在逐渐地沿着perl学习曲线前进(感谢这个非常有用的站点的贡献者),但我正在努力解决这个特殊问题

我正在构建一个perl实用程序,它使用三个(c++)第三方程序。通常情况下,这些都会运行:一个$file_列表| B-args | C$file_out

当进程A读取多个文件时,进程B修改每个单独的文件,进程C收集管道中的所有输入文件并生成一个输出文件,空输入文件表示输入流的结束

输入文件很大(ish),大约100Mb,数量大约为10。这些进程是CPU密集型的,整个进程每天需要应用于数千组文件,因此将中间文件读写到磁盘的简单解决方案效率太低。此外,上述过程只是处理序列的一部分,其中输入文件已经在内存中,输出文件也需要在内存中进行进一步处理

有许多解决方案已经有了很好的文档记录,我有一个使用IPC::Open3()的原型版本。到目前为止,一切顺利

然而,当通过流程B将每个文件输送到流程A时,我需要修改流程B中每个输入文件的参数,而不中断流程C的正向流程。这就是我的目的所在,我正在寻找一些建议

作为进一步的背景:

  • 运行在Ubuntu16.04LTS(目前在Virtual box中)和PerlV5.22.1中
  • 该程序将由一个用户(me!)在一台机器上(或在其中)运行,即无需外部网络通信或多用户或公共要求,因此编程简单优于安全性强
  • 由于进程必须在不中断的情况下重复运行,因此需要健壮/可靠的I/O处理
  • 我可以访问每个进程的源代码,因此可以对其进行修改(尽管我不希望这样)
  • 我为缺少“迄今为止的代码”表示歉意,但我认为问题更多的是“我如何实现这一点?”而不是“我如何让我的代码工作?”

    非常感谢任何指针或帮助。

    您需要第四个程序(称为D),该程序确定B的参数应该是什么,并使用这些参数执行B,并且D的stdin和stdout连接到B的stdin和stdout。然后,您可以在管道中将B替换为D


    D使用什么语言取决于您。

    如果您希望将不同程序的输出输入到管道中,我建议您希望看到的是。。。嗯


    这使您可以设置一个管道,它的工作原理与您从
    IPC::Open3
    中获得的管道非常相似,但对您读/写的内容有更多的控制

    我们能理解
    B
    中的参数有什么不同吗。。。按文件。。。?但是从那里开始:如果
    文件\u列表
    作为参数列表,从
    A
    无顺序处理,我不知道每个文件的
    B
    会有什么不同。管道输送到A的10个文件中,每个文件的B参数都不同。在管道输送第一个文件到A之前,了解所有文件的参数值会有所帮助。这是问题的核心。如何设置管道命令,以便在不干扰管道到C的情况下,改变管道到a的每个文件在B中的参数。