列表--数组的形式
形式:(1,"a",2.3,$a,$x+1)
元素可以是任意类型,变量,表达式
空列表:()
单元素列表:(2) 。 与值2不同。
qw(1 $a str)
qw用法同q,qq. ()可替换成其他符号<>
可以为值,变量,不同引号的字符窜,有空格分开
范围表示的列表:
.. : 范围运算符。每次增1。 1..3
(1,2,3,4,5,6) -->(1..6) 元素从左边的值增加到右边的值。
(1,2,3,4,5,6) --> (1,2..5,6)部分使用范围
(3..3) -->(3) 首尾一样,不能增
(2.4..5.3)-->(2.4,3.4,4.4)小数同样也增1,到小于右边的值的小数。
(4.5..1.6)-->()左边值>右边值 则为空
数组---列表的存储
数组形式: @a=(1,2,3)
与$a是不同的变量
初始为空()
元素形式:$a[0]
数组的元素为简单变量,以$开头。后面的变量名同数组名。
下标从0开始。[] 有时也称为运算符。
负索引;最后一个元素可以用$a[-1]表示,倒数第二格为$a[-2].
列表也可以有下标:(1,2,3)[0] -->1 但是列表没有存储,不能在下次使用
数组的赋值
形式:以下结果@a均为含元素1,2,3,4的数组。
1. @a=(1,2,3,4);标准的列表赋值
2.@b=(1,2,3,4),@a=@b;数组复制
3.@b=(2,3),@a=(1,@b,4);
4.@b=('a') * 4;@b=('a','a','a','a');
5.@b=<>;从标准输入(键盘)读出一行赋予元素,最后ctrl-d结束输入。
改变元素的值:$a[1]=3; @a=(1,3,3,4);
数组的读出:
单个元素读取: $a=$a[1];
多元素读取;
每个元素对应到变量:
@a=(1,2,3);($x,$y,$z)=@a;->$x=1,$y=2,$z=3;
多余的变量为空:($a,$b,$c,$d)=@a;-->$a=1,$b=2,$c=3,$d=""
变量不足,后续元素忽略:($a,$b)=@a;$a=1,$b=2;
$a=@a;$a为数组长度。($a)=@a;为取第一个元素
$a=(1,2,3),返回最右的元素,$a=3;
$#a数组最后一个元素的索引。加1即为长度,但对$#a赋值就改变了数组的长度
数组输出:print @a;元素相连
print "@a";元素间加空格
数组片段:
访问数组的部分元素,不是单元素,不是全部。
@a=(1,2,3,4,5)
读出@sub=@a[0,1,3] 读取1,3,4元素 @sub=(1,2,4)
赋值@a[1,3]=("a","b") @a=(1,"a",3,"b",5)
数组的元素列表可用列表的各种形式表示:
范围:@sub=@[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=(1,2,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):在数组末尾删除元素
reverse @a,数组反序
数组函数之二:
Join('连接符',@a) 把数组练成一个字符窜
@a=('a','b')join(',',@a)='a,b';join(',','a','b')='a,b';
split(/模式/,分割串,长度)
模式:缺省为空格,可省略
分割窜:缺省为$_,可省略
长度:可省略,全部分割
$s=a,b,c";@a=split(/,/,$s);@a=('a','b','c');
@a=split(/,/,$s,2); @a=('a','b,c');
wantarray():当期望返回数组时为真,返回简单变量时为假@a=mysub;$a=mysub;
数组函数值三
splice:
@ret=splice(@a,skip,length,@newlist)
对@a操作,跳过skip个元素,然后开始用@newlist替换length个元素。@newlist和length可以不等长,无论@newlist多长,
它占用(替换)length长的元素位置。
当length=0时为插入,splic(@a,-1,0,@n)在末尾追加
当@newlist为空则删除。
当length和@newlist省略时为其后的全部删除。splice(@a,3);
@found=grep(/pattern/,@serch)对@serch的每一个元素搜索匹配模式,匹配的元素返回到@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]}
元素访问: $aoa->[0][0]
有一维数组构成而维数组:
@a=(1,2,3);
@b=('a','b','c');
$aoa=[[@a],[@b]];
$aoa->[0][0];
[oracle@jhoa 12]$ cat 3.pl
print "二维数组示例:";
$aoa=[[1,2,3],['a','b','c']];
print "$aoa->[0][0]
";
print "@{$aoa->[0]}[0,1]
";
print "@{$aoa->[0]}
";
print "@$aoa
";
[oracle@jhoa 12]$ vi 3.pl
[oracle@jhoa 12]$ perl 3.pl
二维数组示例:1
1 2
1 2 3
ARRAY(0xac92a0) ARRAY(0xac9170)
a
[oracle@jhoa 12]$ cat 3.pl
print "二维数组示例:";
$aoa=[[1,2,3],['a','b','c']];
print "$aoa->[0][0]
"; ##打印第一个数组的第一个元素
print "@{$aoa->[0]}[0,1]
"; ##打印第一个数组的第1?两个元素
print "@{$aoa->[0]}
"; ##打印第一个数组
print "@$aoa
";
@a=(1,2,3);
@b=('a','b','c');
$aoa=[[@a],[@b]];
print "$aoa->[1][0]
";
[oracle@jhoa 12]$ cat 1.pl
#!/usr/bin/perl
print "单元素列表:";
@a = (2);
$a = $a[0];
print $a;
print "
列表范围:";
@a=(4.5..1.6);
print "@a
";
print "列表元素:";
$a=(1,2,3,4)[1];
print "$a
";
print "列表赋值:";
$a=(1,2,3);
print "$a
";
print "$#a的应用:";
@a=(1,2,3);
print "数组长度为$#a+1 "; ## $#为最后一个元素下标
$#a=1;
print "数组元素减少为@a
";
print "sort的使用:";
@a=(1,12,4,8,20);
print sort(@a);
print sort {$a<=>$b}(@a);
[oracle@jhoa 12]$ cat 1.pl
#!/usr/bin/perl
print "单元素列表:";
@a = (2);
$a = $a[0];
print $a;
print "
列表范围:";
@a=(4.5..1.6);
print "@a
";
print "列表元素:";
$a=(1,2,3,4)[1];
print "$a
";
print "列表赋值:";
$a=(1,2,3);
print "$a
";
print "$#a的应用:";
@a=(1,2,3);
print "数组长度为$#a+1 "; ## $#为最后一个元素下标
$#a=1;
print "数组元素减少为@a
";
print "sort的使用:";
@a=(1,12,4,8,20);
print sort(@a);
print sort {$a<=>$b}(@a);
print "$#a的应用:";
@a=(1,2,3);
print "数组长度为$#a+1 ";
$#a=1;
print "数组元素减少为@a
";
print "sort的使用:";
@a=(1,12,4,8,20);
print sort(@a);
print "
";
##<=>数值比较运算
print sort {$a<=>$b} (@a);
print "
split示例:";
$a='a,b,c';
@b=split(/,/,$a,2);
print "@b
";
#每个元素加1
print "map示例:";
print map($_+1,(1,2));
print "
";
print "wantarray示例:";
sub mysub(){print wantarray()?"数组 ":"变量
";}
@a=mysub;
$a=mysub;
print "二维数组示例:";
$aoa=[[1,2,3],['a','b','c']];
print "$aoa->[0][0]
";
print "@{$aoa->[0]}[0,1]
";
print "@{$aoa->[0]}
";
print "@$aoa
";
print "二维数组示例:";
$aoa=[[1,2,3],['a','b','c']];
print "$aoa->[0][0]
"; ##打印第一个数组的第一个元素
print "@{$aoa->[0]}[0,1]
"; ##打印第一个数组的第1?两个元素
print "@{$aoa->[0]}
"; ##打印第一个数组
print "@$aoa
";
@a=(1,2,3);
@b=('a','b','c');
$aoa=[[@a],[@b]];
print "$aoa->[1][0]
";