Chinaunix首页 | 论坛 | 博客
  • 博客访问: 570423
  • 博文数量: 201
  • 博客积分: 7734
  • 博客等级: 少将
  • 技术积分: 1994
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-09 19:18
文章分类

全部博文(201)

文章存档

2011年(28)

2010年(173)

分类:

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;  #默认打印$_

9:14 2010-8-17

阅读(701) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~