我正在運行以下代碼,並試圖通過@rainbow
陣列中倒數第五個元素打印@rainbow
陣列中的第一個元素。此代碼對數組的邊界內任何積極的指標,而不是消極的:如何在Perl中打印最後一個數組元素的第一個到第五個元素?
@rainbow = ("a".."z");
@slice = @rainbow[1..-5];
print "@slice\n";
我正在運行以下代碼,並試圖通過@rainbow
陣列中倒數第五個元素打印@rainbow
陣列中的第一個元素。此代碼對數組的邊界內任何積極的指標,而不是消極的:如何在Perl中打印最後一個數組元素的第一個到第五個元素?
@rainbow = ("a".."z");
@slice = @rainbow[1..-5];
print "@slice\n";
你想
my @slice = @rainbow[0 .. $#rainbow - 5];
注意,1是第二個元素,而不是第一個。
的..
操作形成從左至右價值range - 如果權大於或等於剩下。另外,在Perl中,數組索引從零開始。
這個怎麼樣?
@slice = @rainbow[0..$#rainbow-5];
$#array
給出了數組中最後一個元素的索引。
從開頭兩句爲range operator,在perlop記載:
二進制「」是的範圍內操作,這是根據上下文實際上是兩個不同的運營商。在列表上下文中,它返回從左值到右值計數(由1開始)的值列表。如果左側值大於右側值,則返回空列表。
當代碼不起作用時,分解它以查看發生了什麼。舉例來說,你會嘗試的範圍內操作,看看它產生:
my @indices = 1 .. -5;
print "Indices are [@indices]\n";
當你有一個空的列表,並意識到有一些事情,你不明白,檢查無論你是文檔試圖去檢查它是否在做你認爲應該做的事情。 :)
萬一任何人需要查找什麼$#數組意味着http://stackoverflow.com/questions/8618858/how-do-dollar-and-number-sign-together-work-in-perl – 2015-02-19 01:03:04
謝謝@Chas,它爲我工作 – 2016-02-15 06:17:30