perl函式說明 defined

2021-06-22 12:52:45 字數 1287 閱讀 4395

defined

defined expr

defined

這個函式返回乙個布林值,表明 expr 是否是乙個已經定義的數值。你處理的大多數資料都是已經定義的,但是乙個標量如果不包含有效的字串,數字,或者引用值,那麼就說它是未定義的數值,或者簡稱 undef。把乙個標量變數初始化為乙個特定的值將定義它,並且將一直保持已定義狀態直到你給它賦乙個未定義值或者在該變數上明確呼叫 undef 函式。

許多操作在異常條件下都返回 undef,比如檔案末尾,使用乙個未初始化的變數的數值,乙個作業系統錯誤等等。因為 undef 只是假值的一種,所以簡單布林測試並不能分別 undef,數字零,和乙個單字元字串,「0」——它們都等於假。當你正在進行的操作可能返回乙個真正的空字串時,defined 函式可以讓你可以區分未定義的空字串和定義了的空字串。

下面是乙個測試乙個來自某雜湊的標量值的片段:

print if defined $switch;
當象上面這樣在雜湊元素上使用的時候,defined 只告訴你該數值是否定義,而不會告訴你該鍵字在雜湊裡是否有記錄。有可能出現這種情況:有乙個鍵字,其值是未定義的;但鍵字本身仍然存在。使用 exists 判斷某個雜湊鍵字是否存在。

在下面乙個例子裡,我們利用了有些操作在用光你的資料之後會返回未定義數值的傳統:

print "$val\n" while defined($val = pop(@ary));
而在下面這個例子裡,我們使用用於檢索系統使用者資訊的 getpwent 函式獲取同樣的資訊.

setpwent();

while(defined($name = getpwent()))

endpwent();

下面的例子從那些可能返回合法假值的系統呼叫中獲取錯誤返回:

die "can't readlink $sym: $!"

unless defined($value = readlink $sym);

你還可以用 defined 檢查乙個子過程是否已經被定義。這樣就有可能避免把乙個不存在的子過程給破壞掉(或者是已經宣告但尚未定義的子過程。):

indir("funcname", @arglist);

sub indir

else

}

在聚集(雜湊和陣列)上使用 defined 是不允許的。(以前這麼做是報告該聚集的記憶體是否已經分配。)你可以使用簡單的布林測試來檢查該陣列或雜湊是否含有元素:

if (@an_array) 

if (%a_hash)

又見 undef 和 exists。

perl函式說明 chroot

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

perl函式說明 close

close close filehandle close這個函式關閉與 filehandle 關聯的檔案,套接字,或者管道。如果省略引數,那麼它關閉當前選定的檔案控制代碼。如果關閉成功它返回真,否則返回假。如果你準備馬上就對 filehandle 做另外一次 open,那麼你用不著關閉它,因為下一次...

perl函式說明 each

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