如何以跨平台的方式传递两个Perl CORE::system命令?
我正在编写一个System::Wrapper模块来抽象如何以跨平台的方式传递两个Perl CORE::system命令?,perl,multithreading,named-pipes,Perl,Multithreading,Named Pipes,我正在编写一个System::Wrapper模块来抽象CORE::System和qx操作符。我有一个serial方法,尝试将command1的输出连接到command2的输入。我在使用命名管道方面取得了一些进展,但是POSIX::mkfifo不是跨平台的 以下是我到目前为止的部分内容(底部的run方法基本上调用system): 我的具体问题: 除了POSIX::mkfifo之外,还有跨平台的替代方案吗?Win32命名管道无法工作,因为您无法将其作为常规文件打开,套接字也不能,原因相同 二,。上述
CORE::System
和qx
操作符。我有一个serial
方法,尝试将command1的输出连接到command2的输入。我在使用命名管道方面取得了一些进展,但是POSIX::mkfifo
不是跨平台的
以下是我到目前为止的部分内容(底部的run
方法基本上调用system
):
我的具体问题:
第2点已解决;
-p
fifo文件测试没有测试正确的文件。出于兴趣,为什么需要fifo?你不能只设置一个普通的管道(例如,带?)吗?如果你可以使用更强大的支持,为什么还要使用线程呢
事实上,您可以使用CPAN模块为您完成大部分工作。例如:
use IPC::Run qw(run);
run ['perl', '-pe', ''], '<', 'input.txt', '|', ['perl', '-pe', '$_ = reverse $_}'], '>', 'output';
使用IPC::运行qw(运行);
运行['perl'、'-pe'、'']、''output';
…应该可以在Linux或Windows上正常工作。出于兴趣,为什么需要FIFO?你不能只设置一个普通的管道(例如,带?)吗?如果你可以使用更强大的支持,为什么还要使用线程呢 事实上,您可以使用CPAN模块为您完成大部分工作。例如:
use IPC::Run qw(run);
run ['perl', '-pe', ''], '<', 'input.txt', '|', ['perl', '-pe', '$_ = reverse $_}'], '>', 'output';
使用IPC::运行qw(运行);
运行['perl'、'-pe'、'']、''output';
…应该可以在Linux或Windows上正常工作。我不能使用常规管道,也不能使用IPC::Run,因为我不能确定程序是否会将有意义的输出打印到标准输出或从标准输入中读取。有些程序可能需要将输入或输出文件设置为参数,否则将失效。关于
fork
与threads
的比较,我的印象是fork
实际上在(比如)windows环境下不那么健壮。但我没有真正的理由在fork上使用线程。我不能使用常规管道,也不能使用IPC::Run,因为我不能确定程序是否会将有意义的输出打印到STDOUT或从STDIN读取。有些程序可能需要将输入或输出文件设置为参数,否则将失效。关于fork
与threads
的比较,我的印象是fork
实际上在(比如)windows环境下不那么健壮。但我没有真正的理由在fork上使用线程。