我從STDIN讀了幾行。如何將剩餘的STDIN傳遞給從標準輸入讀取的命令(例如md5sum
或wc
)?Perl:將打開的文件句柄傳遞給程序讀取STDIN
我可以做一個:
read_a_few_lines_from_diamond_operator();
open (C, "|cmd");
while(<>) { print C }
close C;
cleanup_after_C();
但efficency原因,我想不要觸摸輸入,而是通過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();
但efficency原因,我想不要觸摸輸入,而是通過文件「富」的其餘部分。
我有一種感覺,它可以用詭計像select
,open(FOO,">&STDOUT)
,exec 6<&0
,fork
,pipe
來完成。
優雅的解決方案,讓你豎起大拇指,但它有兩個問題:它殺死perl(我澄清了這個問題,以清楚表明這不會對我有用);它不涉及第二部分(讀取'foo'文件)。 –
它爲什麼不起作用?就像答案所說,它適用於'system'和'exec'。 'perl -e'print <>;系統( 「貓」);打印「仍然在這裏\ n」'
tripleee
斑點。這工作:'seq 10 | perl -e'sysread(STDIN,$ a,1);打印「$ a bar」;系統(「貓」);打印「仍然在這裏\ n」''。儘管如此,它仍然會讀取文件'foo'。 –