perl列表与数组


-1-------------------------------------------------------------------------------------------------------------
  在perl代表复数就是列表和数组。
  什么是列表:
      列表指的标量的有序集合(精确地说列表是数据)。
  什么是数组:
       数组则是存储列表的变量(精确地说数组指的是变量)。

   列表和数组关系:
       列表的值不一定存储在数组,但每个数组变量都一定包含一个列表。
       列表和数组的第一个元数总是第0个元数。
-1-------------------------------------------------------------------------------------------------------------


-2-------------------------------------------------------------------------------------------------------------
  访问数组中的元数:
     数组元素是以连续的整数来编号,从0开始,之后的每一个元数依次加1,例:

     @test=[1,2,3,4,56,7,8,10];
     $test[0]; #result is 1
     $test[1]; #result is 2

     $test[10]='11'; #给@test数组的第11个元素赋值为11;

   特殊的数组索引:
      假如你索引值超过数组尾端的元素进行赋值,数组将会需要自动扩大---只要有可用的内存分给perl,数组的长度是有上
      限的。

      $test[0] = 'test1';
      $test[1] = 'test2';
      $test[2] = 'testn';

      在有些情况下你想访问数组的最后一个元素的索引值,对test来说最一个元素的索引值是$#test.

      $new = $#test;  #数组元素索引的最后一个值。

      从数组尾端往回计数的"负数数组索引值"。不过,超过数组大小的负数索引值是不会绕回来的。

      @test=[1,2,3,4,5,6];

      $test[-1]; #result is 6
      $test[-2]; #result is 5
      $test[-7];  #result is undef
-2-------------------------------------------------------------------------------------------------------------



-3-------------------------------------------------------------------------------------------------------------
    列表直接量:
       列表直量(list literal,也就是在程序中代码中表示一列数据的写法),可以由圆括号内逗号隔开的一串数据表示,
       而这些数据就称为列表元素。

       (1,2,3,4,5);  #包含5个元素的数字列表
       ();  #空元素列表
       (1..100); #100个整数元素的数字列表。

       .. 是一个范围捷操作符(range operator)

       (1..5);   #与(1,2,3,4,5)相同
       (1.7..5.7);  #同上,但小数部分被去掉
       (5..1);      #空列表-----..只能向上计数

    qw简写:
       qw表示:"quoted word"(加上引号的单词),perl会将其当成单引号内字符串来处理(所以,在qw构建的列表中,不能像
       双引号内的字符串一样使用\n or $fred)。其中空白符(比如空格,制表符以及换行符)会被抛弃。

       qw( 
           test1
           test2
           test3
           test4
         );  

        员括号作为定界符,perl还允许其他任何标点符号来作为定界符。
        qw! test1 test2 test3 test4!;
        qw/ test1 test2 test3 test4/;
        qw# test1 test2 test3 test4#;

    列表的赋值:
    ($test1,$test2,$test)=("hello1","hello2,","hello3");   
    ($test1,$test2)=($test2,$test1); #交换两个变量的位置

-3-------------------------------------------------------------------------------------------------------------


-4-------------------------------------------------------------------------------------------------------------
 poppush操作符(对数组尾部操作):
    要新增元素到数组尾端时,只要将它存放到更高的索引值对应的新位置上。

    pop,负责取出数组中最后一个元素并将其作为返回值返回:
      @array = 5..9;
      $fred  = pop(@array);  #$fred 变成9,@array现在是(5,6,7,8)
      $barney = pop @array;  #$barney 变成8,现在是5,6,7
      pop @array;       #@array现在是(5,6).


    push, 用于添一个元素(或是一串元素)到数组的尾端。

    push(@array,0);     #@array现在是(5,6,0);
    push @array,8;      #@array现在是(5,6,0,8);
    push @array,1..10;  #@array得到了10个元素。
    @others = qw/9 0 2 1 0/;
    push @array,@others;  #@array又得到了5个新元素。



  shiftunshift操作符(对数组开头):

  shift,是对数组开头取出第一个元素将其值作为返回值

     @test =qw( test1 test2 test3);
     $t = shift @test;  #$m的值为test1,@test数组现是(test2,test3);
     $s = shift @test;  #$s的值为test2,@test数组现是(test3);
     shift @test;    #现在@test为空了

     $u = shift @test; #$u values is undef;

  unshift,是对数组开头添加一个元素;
     unshift (@test,5); #now @test only has one liter(5);
     unshift (@test,4), #now @test have 4,5
     @other = 1..3;
     unshift (@test,@other); #now @test have 1,2,3,4,5,6;


  splice操作符
      是用来对数组中的某个元素添加或移除捷操作。
      第一个参数是操作的目标数组,
      第二个参数是操作数组的一组元素的开始位置。
      第三个参数指定操作元数长度(表示要操作元素的个数,即长度)。

      @arrary = qw( test1 test2 test3 test4 test5);
      @removed = splice @array 1,2;   #remove test2 test3
                                      #@removed 变成(test2 test3);
                                      #@rarray 变成qw(test1 test4 test5);

      @array = qw(pbbles dino fred barney);
      @removed = splice @array,1,2,qw(wilma); #删除dino and fred
                                              #@removed 变成qw(dino fred);
                                              #@array变成qw(pebbles wilma barney betty);

      @array = qw(bebbles dino fred barney):
      @removed = splice @array,1,0,qw(wilma); #什么元素都不删除
                                              #@removed 变成qw()

-4-------------------------------------------------------------------------------------------------------------


-5-------------------------------------------------------------------------------------------------------------
  reverse操作符:
     reverse操作符会读取列表的值(也许是数组),并按相反的次序返回该列表。

     @fred = 6..10;
     @barney = reverse(@fred);  #得10,8,7,6
     @wilma  = reverse 6..10;   #同上,但不需要额外的数组
     @fred   = reverse @fred;   #将逆序后的结果放回原来那个数组  
-5-------------------------------------------------------------------------------------------------------------

-6-------------------------------------------------------------------------------------------------------------
  each操作符:
     每次对数组调用each,会返回数组下一个元素。
     !perl
     my @test =qw(test1 test2 test3);
     while(my $t = each @test)
     {
         print "$t\n";
     }
-6-------------------------------------------------------------------------------------------------------------


-7-------------------------------------------------------------------------------------------------------------
 scalar, 用来计算数组元素的个数.
   @v=qw(1 2 3 4 );
   $value = scalar(@v);  #result is 4;
-7-------------------------------------------------------------------------------------------------------------
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值