美文网首页
第3章 列表与数组

第3章 列表与数组

作者: Hannahhao | 来源:发表于2020-03-06 01:46 被阅读0次

    列表(list):标量的有序集合。--数据
    数组(array):储存列表的变量。--变量
    “标量-标量变量;列表-数组/列表变量”

    1. 访问数组中的元素

    数组元素是以连续的整数来编号的,从0开始,之后每个元素依次加1
    如下所示

    $fred[0] = "yabba";
    $fred[1] = "dabba";
    

    加入下标超过数组的尾端,对应的值将会是undef

    2. 特殊的数组索引

    • 数组元素个数:$#array+1
    • 数组最后一个元素角标:$#array

    3. 列表直接量

    列表直接量:在程序代码中表示一列数据的写法。可以有小括号内用逗号隔开的一串数据表示,而这些数据称为列表元素

    (1, 2, 3)
    ("fred", 4.5)
    

    如果是某种规律的序列,不用逐个键入值。
    范围操作符 ..,可用于自动创建它两侧标量值之间的所有取值,

    (1..100)
    (1..5) = (1, 2, 3, 4, 5)
    

    范围操作符只能从小到大依次累加,因此不能从5..1

    3.1 qw简写

    qw表示”"quoted word", qw简写可以快速输入,免除反复键入引号和逗号。

    ("fred", "barney", "betty")
    qw( fred barney betty)
    

    定界符(delimiter):可以用任何标点符号作为定界符。

    3.2 列表的赋值

    ($fred, $barney, $dino) = ("flintstone", "rubble", undef);

    • 如果等号左边的变量个数不等于右边的个数时,会发生什么?
      多出来的值会被悄悄忽略掉
    • 如果变量的个数多于给定的列表值的个数时,会发生什么?
      多出来的变量将会被设成undef

    当希望引用整个数组时,只要在数组名之前加上@字符(all of the)

    @rocks = qw/ bedrock slate lava /;
    @tiny = ( );
    @rocks = @tiny; #将一个数组中的列表复制到另一个数组
    

    3.3 pop和push操作符

    pop操作符:提取数组末尾的元素并将此作为返回值;
    push操作符:添加一个元素或一串元素到数组尾端。

    split操作符:分割标量
    join操作符:链接标量

    3.4 shift和unshift操作符

    shift操作符:提取一个元素到数组的开头;
    unshift操作符:添加一个元素到数组的开头。

    3.5 splice操作符

    splice操作符:添加或移除数组中间的某些元素
    splice可接受4个参数:

    • 第一个参数:要操作的目标数组
    • 第二个参数:要操作的一组元素的开始位置(如果仅是前两个参数,Perl会把从给定位置开始一直到末尾的全部元素取出来并返回)
    • 第三个参数:指定要操作的元素长度
    • 第四个参数:要替换的列表
      举例:
    @array = qw(pebbles dino fred barney betty)
    @removed = splice @array, 1, 2, qw(wilma); 
    #删除dino和fred,@array变成qw(pebbles wilma barney betty);@removed编程qw(dino fred)
    

    4. 字符串中的数组内插

    和标量一样,数组的内容同样可以被内插到双引号引起的字符串中。

    @rocks = qw{flintstone slate rubble};
    print "quart @rocks limestone\n";
    # 打印5种以空格隔开的石头名
    

    5. foreach控制结构

    foreach循环:遍历列表中的值,依次提取使用。

    foreach $rock (qw/ bedrock slate lav /) {
    print "One rock is $rock.\n";
    }
    #依次打印所有三种石头的名称
    

    6. Perl最喜欢用的默认变量:$_

    假如在foreach循环开头省略控制变量,Perl就会用它最喜欢用的默认变量$_。

    foreach (1..10) {
    print "I can count to $_!\n";
    }
    # 默认会用$_作为控制变量
    

    6.1 reverse操作符

    reverse操作符会读取列表的值,并按相反次序返回新的列表。
    reverse只是返回倒序后的列表。

    6.2 sort操作符

    sort操作符会读取列表的值,依次按字符的内部编码顺序对它们排序。
    排序仅按照ASCII码的大小进行。

    6.3 each操作符

    以前each只能用于提取哈希的键-值对,现在可以用到数组。
    每次对数组调用each,会返回数组中下一个元素对应的两个值--数组索引与元素值。

    7. 标量上下文与列表上下文(敲重点:最重要!!!)

    上下文:如何使用表达式
    当Perl在解析表达式时,要么希望它返回一个标量,要么希望它返回一个列表。表达式所在的位置,Perl期望得到什么,那就是该表达式的上下文。
    举例:

    42+something #这里的something必须是标量
    sort something #这里的something必须是列表
    @people = qw(fred barney betty)
    @sorted = sort @people; #列表上下文:barney, betty, fred
    $number = 42 + @people; # 标量上下文:42 + 3得45
    

    7.1 在标量上下文中使用产生列表的表达式

    某些表达式在标量上下文中不会返回任何值。如sort,总是返回undef;reverse是把列表每一个字符做逆序处理。

    $fred = somthing; #标量上下文
    @pebbles = something; #列表上下文
    ($wilma, $betty)= something; #列表上下文
    ($dino) = something; #还是列表上下文
    

    7.2 在标量上下文中使用产生标量的表达式

    如果表达式求值结果为标量值,则自动产生一个仅含此标量值得列表

    7.3 强制指定标量上下文

    scalar伪函数强制使用标量

    8. 列表上下文中的<STDIN>

    • 列表中的<STDIN>操作符,返回的是所有剩下行的内容,一行一个元素,直到文件结尾。
    • 标量中的<STDIN>操作符,返回的是输入数据的下一行内容。

    相关文章

      网友评论

          本文标题:第3章 列表与数组

          本文链接:https://www.haomeiwen.com/subject/avxcrhtx.html