为何Perl数组计数器$#a返回值小于实际元素个数?
问题解析:Perl数组$#a为何显示2而非3?
示例代码
my $t = "abc\nfoo\nbar"; my @a = split(/\n/g, $t); print $#a . " lines\n"; foreach my $x (@a) { print 'line: ' . $x . "\n"; }
执行输出
2 lines line: abc line: foo line: bar
原因说明
这事儿其实是Perl的数组特性决定的:$#a根本不是返回数组的元素总数,而是返回数组最后一个元素的索引值。Perl里数组的索引是从0开始计数的:
- 第一个元素
abc对应索引0 - 第二个元素
foo对应索引1 - 第三个元素
bar对应索引2
所以$#a输出2完全合理。如果想打印数组的元素个数,得用scalar @a,把代码里的打印语句改成print scalar @a . " lines\n";,输出就会变成3 lines了。
内容的提问来源于stack exchange,提问作者yegor256
相关产品推荐
相关产品推荐

