Perl学习笔记 Learning Perl Chapter III
第三章 Perl中的plural类型—list表和array数组,list是一系列scalar元素的有序集,而array是保存list的那个变量。要点:
1.Accessing Elements of an Array 访问数组元素
array的下标可以是表达式,如:$name[$index+1]=1;可以不是整数,但自动截取整数部分:$name[9.878]~$name[9].
2.Special Array Indices 特殊下标
Perl不对数组长度加以限制,无下标越界之说,如,若只定义$name[0], $name[19]则中间的$name[1]~$name[18]为undef.
数组最后一个元素的下标可通过$#name获得,最后一个元素$name[$#name],数组总长度即为$#name+1.
负数下标:数组最后一个元素下标为-1,其余元素下标从尾到头递减,含三个元素的数组其三个元素下标依次为:-3,-2,-1.
使用负下标是不能“越界”的.
3.List Literal 表的表示
List为圆括号里的一串数据,不一定类型相同,可为空,如:(1,2,3),("shit",8,'what'),().
数据为整型时,一种常用的简捷定义方式:
(1..100)~(1,2,3,4,...,100);
(4.978..12.97867)~(4,5,6,7,...,12);
(1,2,3..7,8)~(1,2,3,4,5,6,7,8);
($start+21..$end);
注意必须为升序,否则为空:
(58..1)~().
4.The qw Shortcut qw简捷定义
qw=quoted words,可以用来把一串(单引号)字符串自动转换成数组,忽略字符串之间的换行,tab和其他多余空白符.
用法:qw(string),qw#string#,qw{string},qw[string],qw<string>.
必要的话可以把用转义符号用\转义。
5.List Assignment 表的赋值
赋值开始之前表就建立好了,所以可以直接用list来交换变量的值,如:($first,$second)=($second,$first).
还可以用list一次性给几个变量赋值 :($first,$second,$third)=($whatever,197,"ohh").
用@定义一个数组,@array1=(1..2),然后就可以用$array[index]使用他的元素了.
给数组赋值的时候可以赋空,scalar,undef数组,或者他们的混合:@array2=(@array1,$whateve,undef,32..145).
6.pop/push shift/unshift 数组的类栈使用
pop/push和shift/unshift分别把数组的尾和头作为栈顶进行栈操作.
$last=pop @array3
push @array,23
push @array4,@array5
$first=shift @array3
unshift @array6,23
unshift @array5,array6
7.The foreach Control Structure foreach控制结构
类似java.
foreach $name (list/@arrayname){do something}
缺省控制变量$_
foreach (list/@arrayname){print $_;}
8.The reverse&sort Operator 逆置&排序操作
reverse把一个数组逆置,但是不改变原数组:
@reversed=reverse list/@arrayname;
@reversemyself= reverse @reversemyself;
sort按ASCII把数组排序,同样不改变原数组:
@sorted=sort list/@arrayname;
@sortmyself=sort @sortmyself;
9.Scalar and List Context 单数变量和表上下文
就是说根据上下文判断什么时候是单数变量的操作什么时候是表的操作
1) Using List-Producing Expression in Scalar Context 单数变量上下文中使用返回list值的表达式
sort在scalar上下文中总是返回undef:
$scalar=sort @arrayname #scalar 值为undef;
reverse在scalar上下文中返回一个string:
$scalar=reverse qw/what the fuck/ #scalar 值为fuckthewhat;
其他情况比较多,使用时自己多体会吧
2) Using Scalar-Producing Expression in List Context 表的上下文中使用返回scalar值的表达式
这个比较容易判断,同样自己体会
3)Forcing Scalar Context 强制使用scalar上下文
一个例子说明一切:
@array=qw/what the fuck/;
print"there is",scalar @array,"elements in the array!\n"; #不加scalar的则会输出@array里的全部元素.
10.<STDIN> in List Context list上下文中的标准输入
@lines=<STDIN>; #每一行连同换行符当做@lines的一个元素
chomp(@lines=<STDIN>); #消除换行符的版本