zoukankan      html  css  js  c++  java
  • Perl 学习笔记-列表和数组

    笔记来自<<Perl语言入门第5版>>

    1.  Perl中列表指标量的有序集合,数组则是存储列表的变量, 这两个术语经常混用,不过更精确地说,列表指数据,而数组指变量.数组的表示用 @my_array,因为Perl觉得@rray 看起来像array,正如 $calar 看起来像时scalar 标量变量一样.

    2.    数组下标从0开始,数组或列表中的每个元素都时单独的标量变量,拥有单独的标量值,有序的.每个元素都有整数作为下标索引.由于每个元素相互独立,所以列表或数组中的元素类型可以时任意混合的.

    3.  数组的名字空间和标量变量的名字空间是完全分开的.

    1 #! usr/bin/env perl
    2 $roger[0] = "roger1";
    3 $roger[1] = "roger2";
    4 $roger[3] = "roger3";
    5 $roger = "Hello";
    6 print $roger[1]."
    ";  #roger2
    7 print $roger."
    ";   #Hello

     4.   任何求值能得到的数字表达式都可以用作下标,假如不是整数,就会自动舍去小数,无论正负.如果下标超出数组尾端,对应的值将是undef ; 如果对索引值超过数组尾端的元素进行赋值,数组会自动增长(无上限),如果在扩展过程中需要创建增补元素,默认取值为undef ; 最后一个元素的索引值为 $#my_array ; 支持负数索引,$my_array[$#my_array] 相当于 $my_array[-1].

    1 #! usr/bin/env perl
    2 $roger[0] = "roger1";
    3 $roger[1] = undef;
    4 $roger[2] = "roger3";
    5 $roger[3] = undef;
    6 $end = $#roger;   #表示数组中最后一个元素的索引
    7 print '$end='."$end
    ";   #输出: $end=3
    8 print $roger[$end]."
    ";  #空的

    5. 列表直接量:

      可以使用范围操作符 ..    ; 范围操作符必须要求两端是整数,否则会自动转化为整数,(1..5)  <=> (1.7,5.1) ,注意的是端点值也改变了的.可以选择数组的部分元素对它进行赋值.

    1 #! usr/bin/env perl
    2 @roger = (1..100);
    3 print $#roger."
    "; #99
    4 @roger = (5..15);
    5 print $#roger."
    "; #10
    6 @roger[0..5] = (5,10);
    7 print $#roger."
    "; #10

    6.   可以使用列表轻松地交换两个变量的值,考虑先取出元素值形成列表,然后分别两次赋值.

    1 #! usr/bin/env perl
    2 $roger = 1;
    3 $loger = 2;
    4 ($roger,$loger) = ($loger,$roger);
    5 print $roger."
    ";  #2
    6 print $loger."
    ";  #1

    7.   多个数组元素和变量值合并到一个数组中,在这个过程中,数组名会被展开成(它所拥有的)元素列表,因为数组只能包含标量,不能包含其他数组,所以数组无法成为列表里的元素;在将某个数组复制到另一个数组时,仍然算时列表的赋值运算,只是列表时存储在数组里而已.如果将列表的引用放入数组中可以实现在数组中放数组的功能.

    1 #! usr/bin/env perl
    2 @roger = (1..100);
    3 @loger = qw(hello I am roger); #qw相当于单引号,并且空格隔开的字符串属于不同的字符串.
    4 $Roger = undef;
    5 @all = (@roger,@loger,undef);
    6 print ($#all+1); #总的元素数量  105
    7 print "
    ";

    8.数组的push和pop操作

     1 #! usr/bin/env perl
     2 @array = 5..9;
     3 print $#array."
    "; #数组原始长度 5
     4 $fred = pop(@array); 
     5 print $#array."
    "; #数组当前长度4
     6 print $fred."
    
    "; # 9
     7 
     8 @roger = 1..10;
     9 print $#roger."
    "; #数组原始长度10
    10 push(@roger,8);
    11 print $#roger."
    "; #数组当前长度11
    12 print @roger[$#roger]."
    "; #8

    如果数组为空,pop()函数返回undef;push()函数可以一次性添加一串元素或者另一个数组(压入的时候替换为元素列表)到目标数组尾端. shift() 和 unshift()函数操作在数组头部,用法类似.

    1 #! usr/bin/env perl
    2 @roger = 1..10;
    3 @other = 5..10;
    4 push @roger,@other; #@other数组压入@roger数组中
    5 print @roger."
    ";

    9.   数组内插.

      内插的时候首尾不会添加额外的空格,但会在各个元素之间自动添加分隔用的空格.

    1 #! usr/bin/env perl
    2 @rocks = qw{flintstone slate rubble};
    3 print "quartz @rocks limestone
    ";#内插,首尾不会有多余空格.
    4 print @rocks;  #这样输出的时候元素之间无空格
    5 print "
    ";
    6 print "@rocks
    ";#这样输出时算内插,元素间有空格
    7 print @rocks."
    "; #这样竟然输出了元素的个数!!!

    内插邮件的时候注意,因为@符号会干扰数组的识别

    #! usr/bin/env perl
    $email = 'roger@gmail.com'; #可以用单引号赋给变量再进行内插,当然也可以在双引号中转义再内插
    print "This is my email: $email
    ";

    索引(下标)表达式会被当成普通的字符串处理,该表达式中的变量不会被内插

    1 #! usr/bin/env perl
    2 @roger = (1..10);
    3 $index = 2;
    4 print "elem:@roger[$index + 3]
    "; #输出 elem:6,看来在新版本中还是会支持内插!!!

    10.  foreach循环

    #! /usr/bin/perl
    @roger = 1..10;
    foreach(@roger){ #foreach 后面的括号不能省掉
        print $_."
    ";
    }

       1) Perl会自动存储循环的控制变量,并在循环结束之后还原,但是在循环执行期间无法访问和修改这个存储了的值,循环结束后恢复循环变量的值(如果没有值会恢复为undef), 所以不必为控制变量的名称而担心

       2) 控制变量就是列表元素本身, 如果循环中修改了控制变量的值, 那么列表的值就被修改了, 这种设计被广泛认可!

  • 相关阅读:
    文件上传和多线程通信
    黏包
    socket通信
    osi七层协议
    面向对象的反射和双下方法
    类的成员和异常处理
    python面向对象类的约束和设计的统一化规范
    单继承和多继承
    对象
    Python-----带参数的装饰器以及补充
  • 原文地址:https://www.cnblogs.com/roger9567/p/4507831.html
Copyright © 2011-2022 走看看