perl第三章 列表和数组

访问数组中的元素    $fred[0]   $fred[1]

    $number=2.75;

    print $fred[$number-1]  结果就是print $fred[1]

特殊的数组索引1.对索引值超过数组尾端的元素进行赋值,数组将会根据需要自动扩大

            2.对最后一个元素索引值     例如数组名围rocks   则最后一个索引值为 $#rocks

列表直接量   

    list literal  (1,2,3)包含1,2,3,这三个数字的列表

                    (1..5)表示 1-5五个数字

                    ($m,17)

qw简写  省略引号

        qw(fred barney betty wilma dino)  列表

列表的赋值  ($fred,$barney,$dino)=("flintstone","rubble","undef");

            当变量的个数多个给的哪个的列表值得个数,那么多出来的变量会被设置为undef

例子:($a[0],$a[1],$a[2])=qw/talc mica/;

    引用整个数组   在数组名前加上@符号即可    后边不加索引值       例如@rack   代表所有的rack

    可用于赋值操作    @rack=qw/bedrock slate lava/;

    将一个数组中的列表复制到另一个数组  @copy=@quary

pop和push操作符   栈的操作   新增元素到数组尾端,存放到更高的索引值的新位置即可

        

    pop用于去除数组中的最后一个元素;

例子:    @array=5..9;

        $f=pop(@array);#$f的值为9,而@array现在是(5,6,7,8);

    也可取消掉括号   pop @array

    push 用于添加一个元素或是一串元素 到数组的尾端

    push(@array,0);最后一个元素是0

shift和unshift操作符

    pop和push都是从数组右边开始弹出和压入

        shift和ushift是从左边开始弹出和压入

        @array=qw #dino fred barney#;

        $m=shift(@array);

        //$m值为dino   array数组为(fred barney)

        unshift(@array,5);@array现在是只有一个元素的列表(5)

splice操作符

    push-pop和shift-unshift均是针对数组首位操作的。如果希望添加或移除数组中间的某些元素,需要用到splice操作符。

        splice 目标数组,操作的开始位置,[3参],[4参];

    例子:@array=qw(p d f b b);

    @removed=splice @array,2;//@array=(p d);

                                //@removed=(f b b);

3参指定要操作的元素长度,代表要操作的元素个数,可以删除掉数组中间的一个片段;

    @array=qw(p d f b a);

    @removed=splice @array,1,2;

    //@removed=qw(d f);@array=qw(p b a);

4参是要替换的列表  3参设为0 即可不删除地插入新列表;

    @array=qw(p d f b a);

    @removed=splice @array,1,0,qw(w);

//        @removed变为qw()    @array变为qw(p w d f b a);

字符串中的数组内插

例子:    @rocks为列表数组

    print “quartz @rocks limestone  ”;

    注意邮件中的@符号   插入的是数组 而非@地址

    $fred[3]   为数组   ;${fred}[3]为变量 $fred的值

foreach控制结构

    例子:foreach $rock(qw/ b s l /)

            {

                print "one rock is $rock. ";   

            }

    在循环中修改了控制变量的值,也同时修改了这个列表元素本身 

        @rocks= qw/b s l/;

        foreach $rock($rocks)

        {    $rock=" $rock";//在@rocks的每个元素前加上制表符

            $rock.=" ";//同时在末尾加上换行符

        }

        print "the rocks are: ",@rocks;各自占一行,并使用缩排

    当循环结束后,控制变量的值仍然是循环执行之前的值,perl会自动保存foreach循环的控制变量并在循环结束之后还原,在循环执行期间,我们无法访问改变已经存储的值,所以当循环结束时,变量仍然保持循环前的值,如果它之前从未被赋值,那就仍然是undef;

    $rock="shale";

    @rocks=qw /bedrock slate lava/;

    foreach $rock(@rocks){

    ..

    }

    print "rock is still $rock ";  //结果为shale

perl最喜欢用的默认变量:$_

    省略上例中的$rock   用perl默认的变量$_

    foreach (1..10){

    print "i can count to $_! ";

    }

    例2:$_="fuck you";

        print;  //默认打印$_的值

reverse操作符

    读取列表或数组的值,并安装相反的次序返回该列表。

例子:@fred=6..10;

    @barney=reverse(@fred);#得到10,9,8,7,6

    注意 reverse会返回次序相反的列表,但是他不会修改传进来的参数。

   例:reverse @fred;#不会修改@fred的值

sort操作符

    读取列表的值,会根据内部的字符编码顺序对他们进行排序。

     按照字符在计算机内部表示的代码点排序。

    例子:@rocks=qw/b s r g/;

        @sorted=sort(@rocks);

        #得到的结果为b g r s

        注意数字当做字符串排序会和期望值有出入

each操作符

    对数组调用each会返回数组中下一个元素对应的两个值    该元素的索引以及该元素的值

   例子1:use 5.012;#perl版本

        my @rocks=qw /b s r g /;

    while(my($index,$value)=each @rocks ){

        say "$index:$value";

     }

例子2:根据索引从小到大一次遍历,借助索引值取得元素的值:

        @rocks=qw/b s r g /;

            foreach $index(0..$#rocks){

            print "$index:$rocks[$index] ";

            }

     例子1,2实现的功能相同

******标量上下文与列表上下文*****非常重要

本节非常重要   同一个表达式出现在不同的地方会有不同的意义。

     perl期望得到什么,那就是该表达式的上下文   

    

原文地址:https://www.cnblogs.com/dongguolei/p/7902962.html