分类:
2010-08-17 09:16:50
shift 和 unshift操作符:
push 和 pop 操作符处理的是数组的尾端,相似地,unshift和shift操作符则是对数组的“开头”(或者
说是数级的“左边”)进行相应的处理。
@array = qw# dino fred barney`#;
$m = shift(@array); #$m 变成"dino",@array 现在就是("fred", "barney")
$n = shift @array ; #$n 变成"fred",@array 现在就是("barney")
shift @array; #现在@array变空了。
$o = shift @array; #$o变成 undef,@array 还是空的
unshift(@array, 5); 现在仅包含一个元素的列表(5)
unshift @array, 4; 现在是(4,5)
@others = 1..3;
unshift @array, @others; 又变成了(1,2,3,4,5)
与pop类似,对于一个空的数级变量,shift会返回undef。
字符串中的数组内插:
和标量一样,数组的内容同样可以被内插到双引号串中。内插时,会在数级的各个元素之间自动添加分
隔用的空格。
@rocks = qw{ flintstone slate rubble };
print "quartz @rocks limestone\n"; #输出5种以空白隔开的石头。
数组被内插后,首尾都不会增添额外空格;若你真的需要,自己加吧:
print "There rocks are: @rocks.\n";
print "There's nothing in the parens (@empty) here.\n";
假如你忘记了数组内插是这样写的,当你将电子邮件地址放进双引号内时,可能会大吃一惊:
$email = ""; #错!这样会内插@bedrock这个数组
$email = "fred\@bedrock.edu"; #转义后就是正解的邮箱地址了。或者用单引号。
@fred = qw(hello dolly);
$y = 2;
$x = "This is $fred[1]'s place; #得"This is dolly's place"
$x = "This is $fred[$y-1]'s place; #同上
注意:索引表达式(index expresssion)会被当成普通字符串表达式处理。该表达式中的变量不会内插。
也就是说假如$y包含字符串"2*4",索引结果仍然为1,而非7。因为"2*4"被看作数字时($y在对数字求值
的表达式中)相当于数字2。
如果在某个标量变量后面接着写左方括号,你需要先将这个方括号隔开。它才不至于被识别为数组检索
的一部分。@fred = qw(eating rocks is wrong);
$fred = "right"; #我们想要说"this is right[3]"
print "this is $fred[3]\n"; #用到了$fred[3],打印"wrong"
print "this is ${fred}[3]\n"; #打印"right"(用花括号避开误解)
print "this is $fred"."[3]\n"; #还是打印right(用分开的字符串)
print "this is $fred\[3]\n"; #还是打印right(用反斜线避开误解)
foreach 控制结构:
如果能对整个数组或列表进行处理,将是非常方便的,foreach(循环)能逐项遍历列表中的值。依次迭
代(循环过程):
foreach $rock (qw/ bedrock slate lava /) {
print "One rock is $rock.\n"; #依次打印所有三种石头的名称
}
========================================================
@rocks = qw/ bedrock slate lava /;
foreach $rock (@rocks) {
$rock = "\$rock"; #在@rocks的每个元素前加上跳格符
$rock .= "\n"; #同时在末尾加上换行符
}
print "The rocks are:\n", @rocks; #各自占一行,并使用缩排
Perl的“老地方”:$_
假如你在foreach循环的开头省略了控制变量,Perl就会使用它的“老地方”变量$_。这个变量除了名称比
较特别之外,和其它的标量变量(几乎)没什么差别。
foreach (1..10) { #默认会用$_迭代
print "I can count to $_!\n";
}
=====================
$_ = "Yabba dabba doo\n";
print; #默认打印$_