2013-10-17 84 views
0

考慮下面的代碼:

my @candidates = get_candidates($marker); 
CANDIDATE: 
for my $i (0..$#candidates) { 
    next CANDIDATE if open_region($i); 
    $candidates[$i] = $incumbent{ $candidates[$i]{region} }; 
} 

什麼是在第3行意義$#

+1

你應該在這裏評論/提出問題之前已經經歷了基本。 – pkm

+2

@dev kumar:順便說一下,'$#arrayname'也可以用在賦值的左邊來改變最高索引號,擴展或截斷一個數組(不經常使用)。 – cdarke

+0

@cdarke謝謝:) –

回答

4

由於候選人是一個數組,$#candidates是最大的指數(要素數 - 1)

例如:

my @x = (4,5,6); 
print $#x; 

將打印2因爲這是最大的指數。

注意,如果數組爲空,$#candidates將爲-1

編輯:從perldoc perlvar

  $# is also used as sigil, which, when prepended on the name of 
      an array, gives the index of the last element in that array. 

       my @array  = ("a", "b", "c"); 
       my $last_index = $#array; # $last_index is 2 

       for my $i (0 .. $#array) { 
        print "The value of index $i is $array[$i]\n"; 
       } 
+0

啊......謝謝:) .. –

4

這意味着array_size - 1。它與(scalar @array) - 1相同。

+3

即使數組爲空(並且給你-1),它也是成立的。 – SheetJS

+0

謝謝:) ................... –

+0

感謝您的糾正,已更新 – mvp

6

它是數組最後一個索引的值(在你的情況下它是最後一個候選索引)。

2

在perl中,我們有幾種獲取數組大小的方法,比如print @ arr,print標量(@arr),print $#arr + 1等等。沒有理由,只是使用它。你會得到在與perl進一步聯繫的過程中熟悉perl中的一些默認用法。不像C++/java,perl使用大量的
特殊表達式來簡化我們的編碼,但有時它總是讓我們更加困惑。