微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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’,'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,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,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,-3)    #"1 2 3 4 b 9 10"

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐