2011-12-21 39 views
1

以下perl代碼的目的是做什麼?

$logline{$cod}{s1} = scalar keys %{$valid{$cod}}; 

「有效」應視爲散列參考,而$鱈應視爲關鍵。是對的嗎?

左邊的「s1」代表什麼,一個密鑰又是什麼?

+3

的方式指示的位置時,'scalar'完全是多餘的。該表達式已經在標量上下文中。 – ikegami 2011-12-21 22:31:25

+0

請閱讀[perldoc perldata](http://perldoc.perl.org/perldata.html)和[perldoc perlref](http://perldoc.perl.org/perlref.html),所有內容都會更清晰。 – Ether 2011-12-21 22:43:52

回答

2

RHS

獲取的%valid$cod索引值。

$valid{$cod} 

將這個值看作是一個hashref。

%{$valid{$cod}} 

獲取該hashref的鍵列表。

keys %{$valid{$cod}} 

找出該列表中有多少個鍵。

scalar keys %{$valid{$cod}} 

(這不是它是如何工作的,而不是keys稱爲標量上下文返回表示有多少元素它會回到它當時在列表上下文中的一個數字。)


LHS

散列%logline被索引$cod

$logline{$cod} 

它本身就是一個hashref,它被s1索引。

$logline{$cod}{s1} 

把它一起

第一段的值存儲在由第二

$logline{$cod}{s1} = scalar keys %{$valid{$cod}}; 
+0

@ikegami我想不出一種方式來寫它不同於原來的。或者寫一些難寫的東西,更不用說讀。也許我應該更多地分解它,即使它必須以不同的方式寫。 – 2011-12-21 23:14:57

+0

你甚至可以在列表中使用'scalar'嗎?在perldoc中,它表示在括號化列表上使用時,它只返回最後一個元素。在數組上,是的,但不在列表中。 – TLP 2011-12-21 23:20:38

+0

我指出'keys'在列表上下文以及標量上下文中是有用的。 – 2011-12-21 23:27:57

2

它將$ valid {$ cod}引用的hashref中的元素數存儲到LHS中。

"valid" should be treated as a hashref, 

不,「有效」是%有效哈希的名稱,$有效{}訪問哈希值中的一個值。

$ cod是兩個地方的散列鍵。 「s1」也是一個散列鍵。

+0

所以$ logline {$ cod}再次是hashref,而s1是這個二級哈希的關鍵字?我的理解是正確的嗎? – user1109094 2011-12-21 22:43:03

+0

@ user1109094正確 – 2011-12-21 22:50:12

+0

@ user1109094,'s1'是生成字符串's1'的空白字,是的,它被用作'$ logline {$ cod}'所引用的哈希鍵。 – ikegami 2011-12-21 23:03:28

相關問題