close

Perl 函式 - exists

 

■ 語  法

exists EXPR

 

 

■ 說  明

給一個指定雜湊元素的運算式,如果雜湊中的指定元素曾經被初始化過,則返回真,即使相應的值是未定義的。

print "Exists\n"    if exists $hash{$key};
print "Defined\n"   if defined $hash{$key};
print "True\n"      if $hash{$key};

exists也可以在陣列元素上被呼叫,但它的行為不那麼明顯,而且與陣列上的delete的使用密切相關。

警告:強烈建議不要在陣列元素上呼叫exists。刪除或檢查Perl陣列元素的存在的概念,在概念上是不連貫的,而且會導致令人驚訝的行為。

print "Exists\n"    if exists $array[$index];
print "Defined\n"   if defined $array[$index];
print "True\n"      if $array[$index];

一個雜湊或陣列元素只有在它被定義的情況下才可能是真的,只有在它存在的情況下才可能被定義,但反過來就不一定成立。

如果一個副程式曾經被聲明過,即使它是未定義的,也會返回真。提及一個子程式名稱的存在或定義並不算作聲明它。請注意,一個不存在的副程式仍然可以被呼叫,它的Package可能有一種AUTOLOAD的方法,可以在它在第一次呼叫使用時出現。

print "Exists\n"  if exists &subroutine;
print "Defined\n" if defined &subroutine;

請注意,只要最後的操作是雜湊或陣列鍵的查找或副程式名稱,EXPR就可以任意地複雜。

if (exists $ref->{A}->{B}->{$key})  { }
if (exists $hash{A}{B}{$key})       { }

if (exists $ref->{A}->{B}->[$ix])   { }
if (exists $hash{A}{B}[$ix])        { }

if (exists &{$ref->{A}{B}{$key}})   { }

雖然嵌套最深的陣列或雜湊元素不會因為它的存在被測試而突然出現,但任何中間的元素都會。因此$ref->{"A"} and $ref->{"A"}->{"B"} $key元素將會因為由於上面的$key元素的存在性測試而突然存在。這發生在使用箭頭運算子的任何地方,甚至包括這裡

undef $ref;
if (exists $ref->{"Some key"})    { }
print $ref;  # prints HASH(0x80d3d5c)

使用副程式的呼叫,而不是副程式名稱,作為exists的參數是一個錯誤。

exists ⊂    # OK
exists &sub();  # Error

 


#關鍵字 Perl 函式 - exists用法;Perl 函式 - exists語法;Perl 函式 - exists範例;

 

 

■ Perl  其它函數

▶ Perl 函式|函數|指令集

 


arrow
arrow
    全站熱搜

    News123 發表在 痞客邦 留言(0) 人氣()