【发布时间】:2012-08-30 23:04:31
【问题描述】:
我从 STDIN 读了几行。如何将剩余的 STDIN 传递给从标准输入读取的命令(例如 md5sum 或 wc)?
我可以做一个:
read_a_few_lines_from_diamond_operator();
open (C, "|cmd");
while(<>) { print C }
close C;
cleanup_after_C();
但出于效率原因,我不想触摸输入,而是传递 STDIN 的文件句柄。有点像:
seq 10 | (read A; wc)
read 在将其余部分传递给 wc 之前,读取尽可能多的内容。但是,我不能使用这个解决方案,因为我需要从我的 perl 程序中启动命令,并且我需要在 cmd 完成后进行工作。
我从文件“foo”中读取了几行。如何将剩余部分传递给从标准输入读取的命令(例如 md5sum 或 wc)?
我可以做一个:
open (F, "<foo");
read_a_few_lines_from_F();
open (C, "|cmd");
while(<F>) { print C }
close C;
cleanup_after_C();
但出于效率原因,我不想触摸输入,而是传递文件“foo”的其余部分。
我觉得可以使用 select、open(FOO,">&STDOUT)、exec 6<&0、fork、pipe 这样的诡计来完成。
【问题讨论】:
标签: perl redirect fork filehandle