Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14931
  • 博文数量: 6
  • 博客积分: 420
  • 博客等级: 下士
  • 技术积分: 70
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-12 21:11
文章分类

全部博文(6)

文章存档

2010年(4)

2009年(1)

2008年(1)

我的朋友
最近访客

分类:

2010-08-30 23:09:05

列表及其形式
列表 — 数组的形式
形式: (1,"a",2.3,$a,$x+1)
    元素可以为任意类型、变量、表达式
空列表:()
单元素列表:(2)。与值 2 不同。
qw(1 $a str)
   qw用法同q,qq。()可替换成其他符号<>
作为逗号运算返回最右的元素。$a=(1,2)  => $a=1
范围表示的列表:
.. :范围运算符。每次增 1。 1..3
 
数组
数组 — 列表的存储
形式: @a=(1,2,3) 与$a是不同的变量
   初始为空()
元素形式: $a[0]。下标从 0 开始。
   负索引:最后一个元素可以用 $a[-1]表示,倒数第二个为$a[-2]。
   列表也可以有下标:(1,2,3)[0] -> 1,但列表没有存储,不能在下次使用。
   字符串中 $a[0] 为元素,$a\[0]、${a}[0]、${a}[0]均为字符串 $a[0]。
 
数组的赋值
— @a=(1,2,3,4); 标准的列表赋值
— @b=(1,2,3,4),@a=@b; 数组赋值
— @b=(2,3),@a=(1,@b,4);
— @b=('a') x 4;  => @b=('a','a','a','a');
— @b=<>; 从标准输入(键盘)读出一行赋与元素,最后用ctrl-d结束输入。
— 改变元素的值:$a[1]=3;   => @a=(1,3,3,4);
— 超出数组大小的元素:$a[5]=6;  => @a=(1,2,3,4,"",6)数组自动增长,原来没有的元素值为NULL。
— 读不存在的元素为空:$x=$a[7];
 
数组的读出
— 单个元素读取: $a=$a[1];
— 多元素读取:
  1、每个元素对应到变量:@a=(1,2,3);($x,$y,$z)=@a; => $x=1,$y=2,$z=3;
  2、多余的变量为空:($a,$b,$c,$d)=@a; => $a=1,$b=2,$c=3,$d=""
  3、变量不足,后续元素忽略:($a,$b)=@a; => $a=1,$b=2;
—数组读取:
  1、
;  $a为数组长度,$a=3。($a)=@a; 为读取第一元素。
     $a=(1,2,3) 返回最右的元素, $a=3;
  2、$#a数组最后一个元素的索引。加 1 即为长度。但对 $#a 赋值就改变了数组的长度
— 数组的输出: print @a;     元素相连。
                print "@a";   元素间加空格。
 
数组片断:访问数组的部分元素。不是单元素,不是全部。
@a=(1,2,3,4,5);
— 读出 @sub=@a[0,1,3];  =>  @sub=(1,2,4)
— 赋值 @a[1,3]=("a","b") => @a=(1,"a",3,"b",5);
数组的元素列表可用列表的各种形式表示:
范围: @sub=@a[1..3];  =>  @sub=(2,3,4)         
       $x=1,$y=3;@sub=@a[$x..$y];  =>  @sub=(2,3,4)   
列表: @b=(1,2,3);@sub=@a[@b];  => @sub=(2,3,4)   
       @b=(2,3);@sub=@a[1,@b];  => @sub=(2,3,4)  
       ($a,@b,$c)=(1,2,3,4,5)  => @b=(2,3,4,5), $c=''
数组元素重叠:
交换:@a[1,2]=@a[2,1]  => @a=(2,1,3,4,5)
重叠:@a[1,2,3]=@a[3,2,4] =>  @a=(1,4,3,5,5)
 
数组操作函数
sort{代码块} 或 函数名 @array
  缺省按字母排序,可省略代码块;
  $a,$b 代表数组的元素, @_ 代表数组。
reverse @a  数组反序
chop @a  每个元素截去最后一个字符。
shift(@a) 删除数组第一个元素,返回删除的元素。缺省对 @ARGV 数组。
unshift(@a,$a);  在数组开头增加元素,返回新数组长度。
push(@a,$a); 在数组末尾增加元素。
pop(@a);     在数组末尾删除元素。
join('连接符',@a)   把数组连接成一个字符串
   @a('a','b')  join(',',@a);join(',',a,b)
split(/模式/,分割串,长度)
  模式:缺省为空格,可省略;
  分割串:缺省为$_,可省略;
  长度:可省略,全部分割。
  $s="a,b,c"; @a=split(/,/,$s);  => @a=('a','b','c');
              @a=split(/,/$s,2); => @a=('a','b,c');
wantarray():当期望返回数组时为真,返回简单变量时为假
  sub mysub(){print wantarray()?"数组\t":"变量\n";}
  @a=mysub;$a=musub;
splice:
@ret=splice(@a,skip,length,@newlist)
  对@a操作,跳过skip个元素,然后开始用@newlist替换length个元素。@newlist和length可以不等长,无论@newlist多长,它占用(替换)length长的元素位置。
  当length=0时为插入。splice(@a,-1,0,@n)在末尾追加;
  当@newlist为空,则为删除;
  当length和@newlist省略时,为其后的全部删除。splice(@a,3);
@found=grep(/pattern/,@search) 对@search的每一个元素搜索匹配模式,匹配的元素返回到@found数组中。
map(expr,@list) 对@list每个元素进行expr运算,返回运算后的数组。元素用$_代表。map($_+1,(1,2))-->(2,3)
 
二维数组简介
$aoa=[[1,2,3],['a','b','c']];
  内含两个子数组(1,2,3),('a','b','c')。
  子数组访问:@{$aoa->[0]}
  子数组元素列表:@{$aoa->[0]}[0,1]
  元素访问:$aoa->[0][0]
由一维数组构成二维数组:
@a=(1,2,3);
@b=('a','b','c');
$aoa=[[@a],[@b]];
$aoa->[0][0];
阅读(512) | 评论(0) | 转发(0) |
0

上一篇:三、perl—控制结构

下一篇:没有了

给主人留下些什么吧!~~