进程不是子程序。
进程之间的通信(“IPC”)主要通过普通文件句柄完成。这样的文件句柄具体可以是
- 标准输入和标准输出,
- 由父进程设置的管道,然后由子进程共享,
- 插座
每个进程也有一个退出代码。此代码为零表示成功,非零表示失败。代码可以是 0–255 范围内的任何整数。退出代码可以通过exit
函数设置,例如exit(1)
,也可以通过 设置die
。
使用 STDIN 和 STDOUT 是遵循Unix 哲学的命令行程序的正常操作模式。这允许它们通过管道链接到更复杂的程序,例如
cat a b c | grep foo | sort >out
这样的工具可以在 Perl 中通过读取 ARGV 或 STDIN 文件句柄并打印到 STDOUT 来实现:
while (<>) {
# do something with $_
print $output;
}
然后另一个程序可以向该脚本提供数据,并从 STDOUT 读取它。我们可以使用open
将输出视为常规文件句柄:
use autodie;
open my $tool, "-|", "perl", "somescript.pl", "input-data"; # notice -| open mode
while (<$tool>) {
...
}
close $tool;
当你想要一个变量(标量或数组)中的所有输出时,你可以使用qx
一个快捷方式:my $tool_output = qx/perl somescript.pl input-data/
,但这有两个缺点:一,执行一个shell进程来解析命令(shell转义问题,效率低下)。第二,仅当命令完成时输出才可用。open
另一方面,使用允许您进行并行计算。