perl函式說明 close

2021-06-22 12:43:32 字數 1190 閱讀 5716

close

close filehandle

close

這個函式關閉與 filehandle 關聯的檔案,套接字,或者管道。(如果省略引數,那麼它關閉當前選定的檔案控制代碼。)如果關閉成功它返回真,否則返回假。如果你準備馬上就對 filehandle 做另外一次 open,那麼你用不著關閉它,因為下一次 open 會替你關閉它。(參閱 open)不過,對輸入檔案的明確的關閉重置行計數器($.),而 open 做的隱含關閉不會做這件事情。

filehandle 可以是乙個表示式,它的值可以用做乙個間接的檔案控制代碼(要麼是乙個真實檔案控制代碼名字,要麼是乙個指向任何可以解釋為乙個檔案控制代碼物件的引用。)

如果該檔案控制代碼來自乙個管道開啟,如果任何下層系統呼叫失敗或者在管道另一端的程式退出值非零,那麼 close 將返回假。對於後面一種情況,close 強制 $!($os_error)為零。所以如果乙個在管道上的 close 返回了乙個非零值,那麼可以檢查 $! 的值判斷問題來自管道本身(非零值)還是來自管道對端的程式(零值)。不管哪種情況,$?($child_error)都包含與管道另一端的命令相關聯的等待狀態值(參閱在 system 裡它的解釋)。比如:

open(output, '| sort -rn | lpr -p')   # 輸出給 sort 和 lpr

or die "can't start sortlpr pipe: $!";

print output @lines; # 把內容列印到輸出

close output # 等待 sort 結束

or warn $! ? "syserr closing sortlpr pipe: $!"

: "wait status $? from sortlpr pipe";

用 dup(2) (複製)管道的方法製作的檔案控制代碼被當作乙個普通的檔案控制代碼,所以在那個檔案控制代碼上的 close 不會等待子程序。不過你關閉最初的檔案控制代碼的時候就必須等待子程序。比如:

open(netstat, "netstat -rn |")

or die "can't run netstat: $!";

open(stdin, "<&netstat")

or die "can't dup to stdin: $!";

如果你關閉上面的 stdin,那麼不會有等待發生,但是如果你關閉 netstat,那麼就有。

perl函式說明 chroot

chroot chroot filename chroot如果成功,filename 成為當前程序的新的根目錄 用 開頭的路徑名的起點。這個目錄是跨 exec 呼叫繼承的,以及被所有 chroot 呼叫後 fork 出來的子程序繼承。我們沒有辦法撤消一次 chroot。出於安全原因,只有超級使用者可...

perl函式說明 defined

defined defined expr defined這個函式返回乙個布林值,表明 expr 是否是乙個已經定義的數值。你處理的大多數資料都是已經定義的,但是乙個標量如果不包含有效的字串,數字,或者引用值,那麼就說它是未定義的數值,或者簡稱 undef。把乙個標量變數初始化為乙個特定的值將定義它,...

perl函式說明 each

這個以一次乙個鍵字 數值對的方式遍歷乙個雜湊。如果在列表環境裡呼叫它,each 返回乙個兩個元素的列表,該列表包含雜湊中下乙個元素的鍵字和數值,這樣你就可以逐一遍歷它們。如果在標量環境裡呼叫,each 只是返回雜湊中下乙個元素的鍵字。如果雜湊已經全部讀取完了,那麼返回乙個空列表,如果你給這個空列表賦...