你的代碼中的一些東西。此:
my $lcnt = $#{@{$page{'lines'}}};
從來都沒有錯。看看這三個東西會在這裏
$page{'lines'} # presumably an array ref
@{ ... } # dereference into an array
$#{ ... } # get last index of an array ref
這相當於(繼續在自己的代碼):
my @arr = @{$page{'lines'}};
my $foo = @arr; # foo is now the size of the array, e.g. 3
my $lcnt = $#$foo;
如果使用
use strict;
use warnings;
,你應該總是做,毫無疑問(!),你會得到信息致命錯誤消息:
Can't use string ("3") as an ARRAY ref while "strict refs" in use
(其中3
將是你數組的大小)
正確的方式來獲得尺寸(元素數目)的陣列是把數組中的標量上下文:
my $size = @{ $page{'lines'} };
的方式來獲得最後一個元素的索引使用$#
印記:
my $last_index = $#{ $page{'lines'} };
正如你會注意到,語法是一樣的,它只是一個使用@
或$#
得到你想要什麼樣的事,一樣的使用規則陣列
my $size = @array;
my $last = $#array;
所以,當爲,回頭參考:使用@
和$#
不是並且從不正確。
來源
2013-11-27 22:59:10
TLP
$#爲您提供數組的最後一個索引...如果數組包含行,$#arr是行數-1。在這裏你應該考慮使用標量來返回數組中元素的數量。 – Pierre
是'$ page {'lines'}'一個數組還是一個引用? –
「不再有效」是什麼意思?原始代碼不是語法錯誤 - 它現在做了什麼(我猜它會返回-1),它曾經做過什麼,以及你怎麼知道的? – pilcrow