zoukankan      html  css  js  c++  java
  • 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期望得到什么,那就是该表达式的上下文   

        

  • 相关阅读:
    python基础学习(九)
    python基础学习(八)
    python基础学习(七)
    python基础学习(六)
    python基础学习(五)
    python基础学习(四)
    python基础学习(三)
    mysql-binlog server的实现
    percona-toolkit常用工具
    Linux下如何快速定位系统瓶颈在哪里
  • 原文地址:https://www.cnblogs.com/dongguolei/p/7902962.html
Copyright © 2011-2022 走看看