数组变量
数组变量是标量的集合。数组变量与标量有相同的形式,除了其前缀为@符号。下面的语句把三个元素赋给数组变量@food,把两个元素赋给数组变量@music。
数组通过以0开始的索引进行访问,方括号内为索引值。表达式
$food[2]
返回的结果为ells。注意上式中为$,而不是@,因为其引用的是一个标量。
数组赋值
在Perl中,相同的表达式在不同的上下文中会产生不同的结果。下面的第一个赋值语句引用了@music变量,所以结果与第二个赋值语句相同。
这也是把元素加入数组的一种方式。一种更简洁的把元素加入数组的方式是:
push(@food,"eggs");
- 把eggs推入数组@food的结尾。把两个或更多元素推入数组可以用下面方式中的一种:
push(@food, "eggs", "lard");
push(@food, ("eggs", "lard"));
push(@food, @morefood);
push函数返回新的列表的长度。
可以用pop函数移去一个列表中的最后一个元素,然后返回这个元素。在最初的列表中,pop函数返回eels,然后@food中有两个元素:
$grub = pop(@food); # Now $grub = "eels"
也可以把数组赋给一个标量。通常上下文是很重要的。$f=@food;得到@food的长度,但是$f="@food";把列表转换成以空格隔开每个元素的字符串。通过改变特殊变量$"的值可以把空格用其它任何字符串代替。这个变量只是Perl中很多特殊变量中的一个,它们中的很多都有奇怪的名字。
数组也可以用来为多个标量进行赋值:
($a, $b) = ($c, $d); # Same as $a=$c; $b=$d; ($a, $b) = @food; # $a and $b are the first two # items of @food. ($a, @somefood) = @food; # $a is the first item of @food # @somefood is a list of the # others. (@somefood, $a) = @food; # @somefood is @food and # $a is undefined.
最后一个赋值语句的发生是因为数组是贪婪的,@somefood会吞掉@food中的任何值。因此应尽量避免这种方式。
最后,你可能想知道列表中最后一个元素的索引值,可以用这个表达式:$#food。
打印数组:
既然上下文很重要,就不要奇怪下面的表达式产生不同的结果:
print @food; # By itself print "@food"; # Embedded in double quotes print @food.""; # In a scalar context