Perl学习之三:数组与列表

一、列表

   1、列表:标量的有序集合,列表中元素可以是任意标量。

    例:

  • (3, 4, 5)       #包含数值3、4、5的列表
  • (3, 4, 5,)      #同上,末尾逗号会被忽略
  • ('a', "b", 3.4) #字符和数字组合的列表   
  • (1..3)           #相当于(1, 2, 3)
  • (1.3..3.6)     #同上,小数部分会忽略掉
  • (0, 2..5, 8)   #相当于(0, 2, 3, 4, 5, 8)
  • (3..1)           #空列表,指向上计数
  • ( )               #空列表 
  • ($x+$y, $y)   #列表中元素也可以是表达式、变量
  • ($x..$y)        #由$x和$y的值来决定
  • (0, $#arr )    #数组arr的所有索引数字

    2、qw简写

  • 在字符串列前表加qw来代替字符串中的引号,且列表中的元素用空白隔开,空白字符会被忽略

    例:

    qw(a abc cd)   #相当于('a', 'abc', 'cd')

    qw(a   abc

                 cd)   #同上

  • 用qw简写时,列表中的字符串当做单引号字符串处理,因此不能像双引号字符串一样使用/n和变量内插

    例:

    qw(a abc cd  /n)   #不会回车换行

  • qw可以用除了()之外的任意限定符,但左右限定符必须成对出现

    例:

     qw!   hello  word/!    !  #相当于('hello', 'world!')

    qw#  hello  word      #  

    qw{   hello  word      }

    qw<   hello  word     >

    qw[    hello  word      ] 

    3、列表赋值

  • ($a,  $b, $c) = (1, 2, 3)     #将1、2、3分别赋值给$a,  $b, $c
    • ($a,  $b) = ($b,  $a)         #互换a、b的值
    • ($a,  $b) = qw(aa, bb, cc#'aa'赋值给$a,'bb'赋值给$b,'cc'被忽略
    • ($a,  $b) = qw(aa)           #'aa'赋值给$a,$b被设为undef

二、数组   

   1、数组:存储列表的变量,数组变量以@打头, 数组变量的初始值为空列表()

    2、数组赋值

  • {$arr[0], $arr[1]} = qw/aa  bb/  #将字符串aa,bb分别赋值给数组arr的第0个和第1个元素
  • @arr = qw/aa  bb/                    #同上
  • @em = ( );                        
  • @b = 1..3                               #相当于@b = (1, 2, 3)
  • @all = (@arr, @empty, 'cc')       #相当于@all = ('aa', 'bb', 'cc'),数组中不能包含数组,因此@arr被展开。@em为空,所以此数组包含三个元素
  • @arr = @all                            #相当于@arr=('aa', 'bb', 'cc')
  • @all = @arr                            #相当于@all=('aa', 'bb'),将一个数组赋值给另一个数组时,被赋值的数组将会被完全覆盖

     3、数组索引

  • $a[0] = 'index'           #数组下标从0开始     
  • $a[1.7-1]                  #相当于$a[0]任何结果为数字的表达式都可以作为数组下表,下表只取结果的整数部分
  • $a[$#a]                    #数组a最后一个元素
  • $a[-1]                                  #同上,-1表示数组最后一个元素索引,-2表示倒数第二个索引,依次类推

三、操作函数

  • pop函数:删除数组中最后一个元素,同时返回该元素的值

     例:

     @array = 1..3;          

    $t1 = pop (@array);    #$t1= 2,@array = (1,2)

    $t2 = pop  @array;     #pop后面可以不加括号,只要不会因为拿掉括号而改变原意,则括号可以省略

    pop  @array;              #现在@array变为空

    $t3 = pop  @array;     #因为@array为空,所以pop什么都不做

  • push函数:添加一个元素到数组末尾

     例:        

    push (@array, 1);       #array = (1)

    push @array, 2;         #push后面可以不加括号,只要不会因为拿掉括号而改变原意,则括号可以省略

    push @array, 3..5;     #现在@array变为空(1, 2, 3, 4, 5)

    push @other, 6..8;     

    push @array, @other;#因为@array变为空(1, 2, 3, 4, 5, 6, 7, 8)

  • shift函数:删除数组中第一个元素,同时返回该元素的值    

      用法同pop函数

 

  • unshift函数:添加一个元素到数组开头      

     用法同push函数 

 

  • reverse函数:将列表中的元素逆序排列并返回排序后的列表

     例:        

    @arr = 6..10;             

    @temp = reverse @arr;   #@arr变为(10, 9, 8, 7, 6)   

    @temp = reverse 6..10;  #同上,@arr变为(10, 9, 8, 7, 6)  

    @arr = reverse @arr ;     #@arr被倒序

    reverse @arr                  #@arr没有被修改,因为返回值无处可去

  • sort函数:根据字符编码顺序对列表中的元素进行排序并返回排序后的列表

      例:        

    @arr = qw/c d b a/;             

    @temp = sort@arr;               #@temp变为qw/a b c d/  

    @temp = reverse sort 6..10;  #@temp变为qw/10 6 7 8 9/,将数字当成字符串来排序结果会不准确  

    @arr = reverse sort @arr ;     #@arr变为qw/d c b a/,先按sort排序,再按reverse排序

    sort @arr                            #@arr没有被修改,因为返回值无处可去

 

四、字符串中的数组内插

    例:

   @arr = qw{b     c};

   print "a @arr d";             #打印输出:a b c d

   print "a $arr[1] d";          #打印输出:a c d

   print "a $arr[2-1] d";       #同上

   $temp = "right";

 

 

   print "this is $arr/[1]";     #同上,用/区分

   print "this is $arr"."[1]";    #同上用字符串连接符区分

 

   print "this is $arr[1]";      #打印输出:this is c

   print "this is ${arr}[1]";   #打印输出:this is right[1],用大括号区分数组元素和标量变量

 

 

 五、foreach循环结构

  • foreach可逐项遍历列表中的值

     例:

     foreach $rock (qw/a b c/) {
          print "rock is $rock./n";     #每次循环,控制变量$rock都会从列表中取得新值
    }

    输出结果:

    rock is a.

    rock is b.

    rock is c.

  • 可通过修改控制变量(即上例中的$rock)的值对列表元素进行修改,循环结束后控制变量的值恢复为循环前的值

     例:

     @rocks = qw/a b c/;

    $rock = "rock";

     foreach $rock ( @rocks ) {
          $rock = "/t$rock";    #在@rocks的每个元素前加上跳格符

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

           print "The rock is:$rock";
    }

    print "The rocks are:/n", @rocks;

    print "Loop ends: the rock is $rock";

    输出结果:

     The rock is a

    The rock is b

    The rock is c

    The rocks are:
        a
        b
        c

    Loop ends:the rock is rock

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值