我審閱劇本,我所遇到的,我不能想出一個塊:不理解什麼%的做在Perl
if ((@ifAliasVals[1])&&(%{@ifAliasVals[0]})) {
...
}
什麼%{@ifAliasVals[0]}
在做什麼?
我審閱劇本,我所遇到的,我不能想出一個塊:不理解什麼%的做在Perl
if ((@ifAliasVals[1])&&(%{@ifAliasVals[0]})) {
...
}
什麼%{@ifAliasVals[0]}
在做什麼?
if (@ifAliasVals[1] && %{ @ifAliasVals[0] })
是寫
if ($ifAliasVals[1] && %{ $ifAliasVals[0] })
%{ EXPR }
是散列解引用的好方法。 %{ EXPR }
與%hash
基本相同,但是通過引用而不是名稱訪問。
在標量上下文中,%hash
如果散列具有任何元素則返回true,因此%{ $ifAliasVals[0] }
將檢查由$ifAliasVals[0]
引用的散列是否包含元素。
my $hash1_ref = { };
my $hash2_ref = { a => 1 };
say %{ $hash1_ref } ? 'has elements' : 'empty'; # empty
say %{ $hash2_ref } ? 'has elements' : 'empty'; # has elements
語法%{ ... }
對待大括號作爲散列基準之間的表達,和取消引用它,給您整個散列。
語法@ifAliasVals[0]
從數組@ifAliasVals
返回一個數組切片。在這種情況下,陣列分片只有一個元素,所以最好寫成$ifAliasVals[0]
。無論如何,它給了你數組@ifAliasVals
的第一個元素。
因此,整個表達式%{ @ifAliasVals[0] }
將@ifAliasVals
的第一個元素解釋爲散列引用,將其解引用,產生該散列的內容。
在上述if語句的上下文中,如果散列具有任何元素,&&
的右側將爲真,如果散列爲空,則將爲假。
作爲一個便箋,我很驚訝指數是不同的。 'if($ ifAliasVals [0] &&%{$ ifAliasVals [0]})'會更有意義。 (「如果'$ ifAliasVals [0]'包含散列引用,並且引用的散列具有元素,則...」) – ikegami
完美!謝謝。 – cellis