perl系列:列表和数组

列表和数组都是复数名词,列表是直接量,数组是变量,即装列表的容器。

1、列表
直接使用( , , )将若干标量包起来。
()    #空列表

范围操作符:".."
    1 .. 5    #即从1到5
    5 .. 1    #无法计算,结果为undef,因为不能递减计算
    a .. z    #全部小写字母
    A .. Z    #全部大写字母
    aa .. zz    #676个字母

省略引号的字符串列表:qw
    把分界符内的字符串当成单引号字符串,并用空白分隔
    qw\a b c\    #即(‘a’, 'b', 'c')
    注意:分界符可以使用任意两个相同的标点符号或左右对称的分界符
    qw!a b c!; qw#a b c#; qw{a b c};    #都表示(‘a’, 'b', 'c')

列表对列表的赋值,例:
    ($a, $b, $c) = (1 .. 3);    #注意两边长度不等可能会有意外情况发生

2、数组:按数字顺序存贮列表中的元素
从0开始计数
$a[n]    #提取数组@a中第n-1个元素,n可以是表达式
$#a    #数组最后一个元素的索引值,注意:数组长度为$#a+1
$a[-1]    #数组最后一个元素
reverse @a;    #返回和数组a反顺序的一个数组,但不改变数组a本身
sort @a;    #读取数组a,返回按ASCII码排序的一个结果,但不改变数组a本身

pop @a;    #取出数组a的最后一个元素并返回该值
push @a, 'b';    #在数组a末尾添加一个元素,该元素为字符b
push @a, 6, 7, 8    #在数组a末尾添加三个数值
shift @a;    #取出数组a的第一个元素并返回该值
unshift @a, 'b';    #在数组a起始添加一个元素,该元素为字符b
unshift @a, 6, 7, 8    #在数组a起始添加三个数值

在双引号字符串中替换数组时,数组中的相邻元素会使用空格作为分隔符。
实际上该分隔符是perl中的一个特殊变量$"的值,默认为空格。
例:
    @a=(1 ..10);
    print "@a";    #元素之间空格分隔
    print @a;    #元素之间没有分隔
    注意:在双引号替换时,虽然在元素之间有空格分隔,但数组前后两端不会添加空格

@a=undef;    #不是空列表,而是包含一个元素的数组,该元素的值为undef
@a=();    #这才是空数组

splice的用法
参考:http://blog.sina.com.cn/s/blog_88a2ce2f0100vm2j.html
splice (@a,offset,length,list)    #在数组a中,从offset开始,删除length个元素,并在此插入list
    @a=1 .. 10;    “1 2 3 4 5 6 7 8 9 10”
    splice (@a, 2, 3, a .. e);    #“1 2 a b c d e 6 7 8 9 10”
    splice (@a, 2, 3)    #无插入,直接删除。“1 2 d e 6 7 8 9 10”
    splice (@a, 5)    #省略length,则删除offset后的所有元素。“1 2 d e 6”
    splice (@a)    #删除数组a
    @a=1 .. 10;    “1 2 3 4 5 6 7 8 9 10”
    splice (@a, 5, -2, a .. e)    #offset后面所有元素,保留倒数length个元素。“1 2 3 4 5 a b c d e 9 10”
    splice (@a, -5, 3)    #"1 2 3 4 5 a b 9 10"
    splice (@a, -5, -3)    #"1 2 3 4 b 9 10"

3、标量上下文和列表上下文
perl根据上下文环境判断当前位置应该是一个列表还是一个标量。
如果使用了错误的数据形式可能会发生意外。
scalar @a;    #强制使用标量上下文
例:
@a=(1 .. 10);
print @a, "\n";
print scalar @a, "\n";

转载于:https://my.oschina.net/explore/blog/93189

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值