ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Perl 小骆驼 3章笔记 列表和数组

Perl 小骆驼 3章笔记 列表和数组

原创 Linux操作系统 作者:zhaojienju 时间:2011-03-06 21:22:15 0 删除 编辑
列表和数组

列表是指数据,而数组是其变量名。可以有一些值(列表)但不属于数组;但

每一个数组标量都有一个列表。第一个元素的索引为0.

print $fred[0];
$fred[1]="test";

数组中最后一个元素的索引为$#
例如
$rocks[0]="a";
$rocks[1]="b";
$end = $#rocks;
$number_of_rocks=$end+1;
$rocks[$#rocks]="last one";
或者用-1索引最后一个元素
$rocks[-1]="last one";

列表
(1, 2, 3)
(1 .. 100)
(5 .. 1)空列表

qw简写:
qw(fred barney betty wilma dino)相当于
("fred", "barney", "betty", "wilma", "dino")
除了用括号作为分界符,还可以用任何标点符号,如:
qw! fred barney !
qw[ fred barney ]

列表赋值:
($fred,$barney,$dino)=("flintstone","rubble",undef);
可以用来交换两个变量的值
($fred,$barney)=($barney,$fred);

给列表赋值:
($rocks[0],$rocks[1])=qw/talc mica/;
或者
@rocks=qw/talc mica/;
@tiny=(); #空表
@giant=1..1e5;  #包含100,000个元素
@stuff=(@giant,undef,@giant); #包含200,001个元素的表

pop将数组的最后一个元素取出并返回。
@array=5..9;
$fred=pop(@array); #fred=9, @array现在为(5,6,7,8)
pop @array; #@array现在为(5,6,7),8被丢弃

push将一个元素加到数组末尾
push(@array, 0);
push @array, 8;
push @array, 1..10;
@others=qw/9 0 2 1 0/;
push @array, @others;

unshift和shift对一个数组的开头进行操作。
@array=qw# dino fred barney#;
$m=shift(@array); #$m为"dino", @array为("fred","barney")
shift @array;
unshift(@array, 5);
unshift @array, 4;  #@array为(4,5);
@others=1..3;
unshift @array,@others; #@array 为(1,2,3,4,5)

数组放入双引号的字符串中,其中的数组元素会自动由空格分开。

对email应该这样定义
$email="fred\@bedrock.edu";

$fred="right";
print "this is $fred[3]\n";
print "this is ${fred}[3]\n";
print "this is $fred"."[3]\n";
print "this is $fred\[3]\n";
输出
this is wrong
this is right[3]
this is right[3]
this is right[3]


foreach控制结构:
foreach $rock(qw/bedrock slate lava/) {
  print "one rock is $rock.\n";
}
其中$rock是控制变量,如果修改了控制变量,那么原始列表也被修改。
在循环结束后,控制变量将恢复原来的值。

@rocks=qw/a b c/;
$rock="test";
print "$rock\n";
print "@rocks\n";

foreach $rock(@rocks) {
  $rock=$rock."o";
}

print "$rock\n";
print "@rocks\n";
结果为:
test
a b c
test
ao bo co


最常用的默认变量 $_
如果在foreach中省略了控制变量,则使用默认变量$_
foreach (1..10) {
  print "$_\n";
}

或者
$_="test";
print;

reverse将列表和数组反转
@fred=6..10;
@barney=rever(@fred);
@wilma=reverse 6 .. 10;
@fred=reverse @fred;

sort排序:大写排在小写前,数字在字符前

标量和列表上下文:
@people=qw/fred barney betty/;
@sorted=sort @people;    列表上下文:barney betty fred
$number=42+@people;   标量上下文 42+3= 45
又比如对于reverse,在列表上下文,反转列表;在标量上下文,反转字符串
@backwards=reverse qw/yabba dabba doo/;  返回doo, dabba, yabba
$backwards=reverse qw/yabba dabba doo/; 返回oodabbadabbay

@wilma=undef;一个元素(undef)
@betty=();空数组,无元素

scalar将列表转成标量
print @people, scalar @people;

比如对STDIN,是标量还是列表,也不同。对于标量,输入一行,回车,就可以

。对列表,要以ctrl+z来表明结尾,回车。
@lines=;
foreach (@lines) {
  print $_."\n";
}
$line=;
print $line;

读入所有行,不包含换行符
chomp(@lines=);




 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11903161/viewspace-688521/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-10-05

  • 博文量
    80
  • 访问量
    192324