2011-11-14 60 views
3

我在一段代码中看到了这个:

if (some_condition) { 
$index++; 
} 
$index{$some_variable} = $index{$some_variable} + 1; 

$index{$some_variable}是什么意思?为什么要使用它?

谢谢。

编辑: 索引定义为$index=0;

回答

9

它使用其值是$some_variable

(注价值的关键检索在%index散列的条目:也有可能存在一个名为$index标量,但它将占用一个单独的命名空间,也就是说,你可以同时拥有一个散列和一个名为index的标量,它们不会发生冲突。)

+0

但是索引被定义为像$ index = 0; – infinitloop

+5

但是也会有'%index'的赋值,'$ index'是一个标量,'%index'是一个散列,它们是两个不同的变量。当访问标量哈希中的条目时,可以使用'$ index {$ myentry}'。 –

6

Perl有几个命名空间

  • $var是一个标量变量
  • @var是一个数组变量,并$var[$i]是数组的一个元素。
  • %var是一个散列变量,而$var{$i}是该散列的一个元素。
10

如果此代码编写正确,你将有上面这几行:

use strict; 
use warnings; 
my $index; 
my %index; 

if (some_condition) { 
    $index++; 
} 
$index{$some_variable} = $index{$some_variable} + 1; 

$index{$some_variable}指的是哈希,并$index一个标。在perl中,这是完全有效的,并且%index$index将被认为是两个不同的变量。

这也是使用严格来说如此重要的原因。 Why use strict and warnings?

+3

这也是正确命名变量对于可读性很重要的原因。 '%index'应该被命名为'%indices'或者更有意义的东西。 – DVK

+1

@DVK:我对复数形式不太确定。我经常发现自己在写'像我的$ lookup(键%index){...说$ index {$ lookup}; }'并且想知道是否最好坚持'%index'。 – Zaid

+1

@Zaid:然后只是去日本的方式,并使用'index_group'或sth :)(日语没有真正的复数,通过添加“tachi”(组)到一个单词形成很多次“复数”。) – ninjalj

5

$index++;声明中的$index是一个标量。这与它后面的陈述无关。

$index{$some_variable}是散列的一部分,%index。哈希(或关联数组)由一对或多对组成,每对由一个键和一个值组成。该密钥用于访问值:

my %hash = (key_A => value_A, # Here $hash{key_A} accesses 'value_A' 
      key_B => value_B, # ... $hash{key_B} gives 'value_B' 
      key_Z => value_Z ); # 'value_Z' returned by $hash{key_Z} 

判断$index{$some_variable} = $index{$some_variable} + 1;,的$index{$some_variable}值被访问时,递增一,并重新分配给相同的密钥。

请参阅perldoc perlintro,以便对Perl中的变量类型进行温和的介绍,而对于更复杂的数据结构,请参见perldoc perldsc