如题…
可直接使用未声明的变量
如:
1 2 3 4 5 6 7 |
# 累加一些奇数 $n = 1; while ($n < 10) { $sum += $n; $n += 2; # 准备下一个奇数 } print "The total was $sum.\n"; |
说明:在循环开始之前,$sum的初始值是undef,但这并不妨碍程序的运行。
同理,也可以做出一个字符串的累加器:
1 |
$string .= "more text\n"; |
获取最后一个元素的索引值:$#rocks
如:
1 2 3 4 5 6 7 8 9 10 |
$rocks[0] = 'bedrock'; # 第一个元素 $rocks[1] = 'slate'; # 第二个元素 $rocks[2] = 'lava'; # 第三个元素 $rocks[3] = 'crushed rock'; # 第四个元素 $rocks[99] = 'schist'; # 现在有95个undef元素 $end = $#rocks; # 99,也就是最后一个元素的索引值 $rocks[$#rocks] = 'hard rock'; # 此时最后一个元素的值变为hard rock print $rocks[-1]; # 另一种方式获得数组的最后一个元素的值 |
注意
如上例所示,下标为0、1、2、3、99有值,那么下标4-98为undef元素,用负值下标时,这些也计算在内。如
1 |
print $rocks[ -100 ]; # 输出为bedrock |
qw简写和列表直接量
这两块放在一起说吧。
在列表直接量中涉及一个“范围操作符(range operator)”——“..”,如下:
1 2 3 4 5 6 |
(1..5) # 与 (1, 2, 3, 4, 5) 相同 (1.7..5.7) # 同上:这两个数字都会去掉小数部分 (5..1) # 空列表:..仅向上计数 (0, 2..6, 10, 12) # 与 (0, 2, 3, 4, 5, 6, 10, 12) 相同 ($m..$n) # 范围由 $m 和 $n 当前的值来决定 (0..$#rocks) # 上面 rocks 数组里的所有索引数字 |
qw如下:
1 |
qw ( fred barney betty wilma dino ) # 同( "fred", "barney", "betty", "wilma", "dino" ),但qw把 |
qw也可以写成如下形式:
1 2 3 |
qw ( fred barney betty wilma dino) # 同上 |
注意:qw 算是一种单引号,所以不能将注释放在qw列表中,同理,也不能像双引号内的字符串一样使用 \n 或 $fred。
qw可以使用多种定界符(delimiter),如:
1 2 3 4 5 6 7 |
qw! fred barney betty wilma dino ! qw/ fred barney betty wilma dino / qw# fred barney betty wilma dino # # 这里井号是定界符而不是注释 qw( fred barney betty wilma dino ) qw{ fred barney betty wilma dino } qw[ fred barney betty wilma dino ] qw< fred barney betty wilma dino > |
而在qw列表中,可以通过反斜线来转义字符。如:
1 |
qw! yahoo\! google ask msn ! # 这里 ! 是定界符,如果想在qw列表中输出 ! ,则需要用反斜线(\)来转义 |
而qw的多种定界符是很有用的,比如下面这种情况:
1 2 3 4 |
qw{ /usr/dict/words /home/rootbeer/.ispell_english } |
列表的赋值
直接上例子吧:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# 左侧列表中的三个变量会依次被赋予右侧列表中对应的值 ( $fred, $barney, $dino ) = ( "flintstone", "rubble", undef ); # 互换两个变量的值 ( $fred, $barney ) = ( $barney, $fred ); ( $betty[0], $betty[1] ) = ( $betty[1], $betty[0] ); # 等号两边的变两个数不同时 ( $fred, $barney ) = qw< flintstone rubble slate granite >; # 忽略掉末尾两个元素 ( $wilma, $dino ) = qw[ flintstone ]; # $dino被设为 undef # 数组的表示 @rocks = qw/ bedrock slate lava /; @tiny = ( ); # 空列表 @giant = 1..le5 # 包含 100,000 个元素的列表 @stuff = (@giant, undef, @giant); # 包含 200,001 个元素的列表 $dino = "granite"; @quarry = (@rocks, "crushed rock", @tiny, $dino); |
最后一行进行的赋值运算会将 @quarry 设置成拥有5个元素的列表:(bedrock、slate、lava、crushed rock和granite),因为 @tiny 贡献了零个元素给这个列表(由于空列表内没有任何元素,故不会有 undef 被赋值到列表中)。此外,数组名会被展开成(它所拥有的)的元素列表。因为数组只能包含标量,不能包含其他数组。
pop 和 push 操作符
pop 和 push 都是对数组的最后一个元素进行操作。
pop 取出数组的最后一个元素的值,同时返回该值。如:
1 2 3 4 |
@array = 5..9; $fred = pop(@array); # $fred 变成 9,@array 现在是 ( 5, 6, 7, 8 ) $barney = pop(@array);# $barney 编程 8,@array 现在是 ( 5, 6, 7 ) pop @array; # @array 现在是 (5, 6) |
push 用于添加一个元素(或是一串元素)到数组的尾端。如:
1 2 3 4 5 |
push(@array, 0); # @array 现在是 ( 5, 6, 0 ) push @array, 8; # @array 现在是 ( 5, 6, 0, 8 ) push @array, 1..10; # @array 得到了 10 个新元素 @others = qw/ 9 0 2 1 0 /; push @array, @others; # @array 又得到了 5 个新元素(共 19 个) |
注意:pop 和 push 的操作对象必须是数组变量,不能对列表直接量进行操作。
shift 和 unshift 操作符
与 pop 和 push 相对应的,shift 和 unshift 操作符是对数组的“开头”进行操作。
例子略。