2013-02-15 50 views
0

我知道我可以打開一個文件句柄,重定向到像這樣一個文件:重定向到子程序,而不是文件或外部命令

open(HANDLE, ">", "filename.txt"); 

我也可以將其重定向到如下命令:

open(HANDLE, "|-", "grep hello"); 

我想要做的是直接到一個函數:

open(HANDLE, "|func", f); 

f是一個函數WH ich需要一個參數,一個文件句柄,然後可以從該文件句柄讀取它認爲合適的文件句柄,然後寫入它想要的內容。

我知道我可以通過創建它f(FILEHANDLE)一個新的文件仿效這一點,但有一些問題,例如,如果f(FILEHANDLE)的行爲有時會發生變化,而不是把一個函數g(option1, option2)這需要參數和返回功能,f(FILEHANDLE) ,在單獨的文件的情況下,我們需要通過命令行參數,以及命令行引用等所有問題。

任何方式(或任何庫),允許我將文件句柄引導到子例程?我不介意後臺的圖書館是否有fork(),我只是想避免將數據傳遞給shell腳本的混亂。

回答

1

當你想讓代碼具有變量的接口時,你想要tie代碼給變量。請參閱Tie::Handle

+0

我不知道這些如何實現我所問,這是如何打開一個文件句柄的功能。我不想要一個變量的接口。 – Clinton 2013-02-15 06:41:13

+1

'HANDLE'是一個變量。你想要一個函數在一個'print'上被調用,而不是該變量的正常操作。它實現了你所要求的。 – ikegami 2013-02-15 06:42:27

+0

我想你已經回答了我的問題,但它似乎並沒有處理來自'system()'調用的輸出。我在這裏提出了另一個問題:http://stackoverflow.com/questions/14890045/pipe-filehandle-to-fork-of-self – Clinton 2013-02-15 07:40:44

相關問題