1. 理解含义
-
列表(list):标量的有序集合。
-
数组(array):存储列表的变量。
2. 列表与数组的异同
- 列表指的是数据;数组指的是变量;
- 列表不一定要放在数组里,数组变量一定包含一个列表。
- 数组或列表中的每个元素(element)都是独立的标量变量,拥有独立的标量值。
- 数组或列表可以包含任意多个元素,元素的次序是固定的,都有相应的整数作为索引,索引从0开始,之后的每个元素依次加1。
3. 访问数组元素
-
数组的名字空间(namespace)和标量的名字空间是完全分开的。
-
通过下标数字(subscript)访问数组元素,下标超出数组尾端,对应的值为undef。
-
任何求值能得到数字的表达式都可以用作下标,不是整数则会自动舍去小数,无论正负。
-
支持双引号字符串中的数组变量内插。
- 默认空格分隔数组元素,通过 $" 变量设定分隔符
4. 特殊数组索引
- 对超过数组尾端的下标进行赋值,数组自动扩大,空洞中的为undef。
- 数组最后一个元素的索引值是$#array_name,这个数字比数组元素的个数少1,因为还有一个编号为0的元素。
- 用负数作下标,返回尾端开始的元素,下标-1表示最后一个元素。
#!/usr/bin/perl
use warnings;
use strict;
# 数组变量
my @fred = ("yabba","dabba","doo");
# 标量变量
my $fred = "diddley";
# 数组的名字空间和标量的名字空间是完全分开的
print @fred;
print "\n\n";
print $fred;
print "\n\n";
# 通过下标数字访问数组元素
print $fred[0];
print "\n\n";
# 下标超出数组尾端,对应的值为undef
# Use of uninitialized value in print at list_array.pl line xx.
print $fred[3];
print "\n\n";
# 任何求值能得到数字的表达式都可以用作下标,不是整数则会自动舍去小数,无论正负。
my $number = 2.1234;
print $fred[$number - 1]; # 结果与print $fred[1]相同
print "\n\n";
# 支持字符串中的数组内插
print @fred;
print "\n\n";
print "@fred"; # 默认空格自动分隔数组元素
print "\n\n";
# $" 设定分隔符
$" = ":::";
print "@fred";
print "\n\n";
# 创建空数组,添加数组元素
my @fred1 = ();
$fred1[0] = "yabba1";
$fred1[1] = "dabba1";
$fred1[2] = "doo1";
# 超过数组尾端的下标进行赋值,数组自动扩大,空洞中的为undef
$fred1[99] = "diddley1";
print $fred1[99];
print "\n\n";
# Use of uninitialized value in print at list_array.pl line xx.
print $fred1[98];
print $fred1[97];
print $fred1[96];
print $fred1[95];
print $fred1[94];
print "\n\n";
# 数组最后一个元素的索引值是$#array_name
print $fred1[$#fred1];
print "\n\n";
# 用负数作下标,返回尾端开始的元素,下标 -1表示最后一个元素
print $fred1[-1];
print "\n\n";
print $fred1[-2]; #undef
print "\n\n";
网友评论