将数组传递给Perl长度子例程时会发生什么?

时间:2016-03-18 12:10:51

标签: perl subroutine string-length

这是我的代码:

my @list = qw (The quick brown fox jumps over the lazy Perl programmer); 
my @list1 = qw (Sparta F R I j h df dfsd dfsdf ); 
my @list2 = qw (The quick brown fox jumps over the lazy Perl programmer); 
print length(@list), "\n"; 
print length(@list1), "\n"; 
print length(@list2), "\n";

我得到的输出:

2
1
2

产出背后的原因是什么?难道它不能给我第一个元素的长度吗?

2 个答案:

答案 0 :(得分:7)

记录良好herehere

  

length函数始终对字符串起作用,它会创建SCALAR   其参数的上下文。因此,如果我们将数组作为参数传递,   该数组将放在SCALAR上下文中,它将返回   其中的元素数量。

在数组上调用length会返回数组中元素数量的长度。

因此:

  • 10个元素的数组length(@list)返回2length(10) == 2
  • 9个元素的数组length(@list1)返回1length(9) == 1

答案 1 :(得分:7)

此上下文中的数组被计算为其长度计数。由于第一个数组包含10个元素,因此length()函数获取字符串" 10"作为参数并返回2.

第二个数组长度为9,长度为1个字符,因此长度返回1.