2011-12-21 93 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

相关问题