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

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

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

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

 #! usr/bin/env perl
$roger[] = "roger1";
$roger[] = "roger2";
$roger[] = "roger3";
$roger = "Hello";
print $roger[]."\n"; #roger2
print $roger."\n"; #Hello

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

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

5. 列表直接量:

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

 #! usr/bin/env perl
@roger = (..);
print $#roger."\n"; #99
@roger = (..);
print $#roger."\n"; #10
@roger[..] = (,);
print $#roger."\n"; #10

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

 #! usr/bin/env perl
$roger = ;
$loger = ;
($roger,$loger) = ($loger,$roger);
print $roger."\n"; #
print $loger."\n"; #

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

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

8.数组的push和pop操作

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

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

 #! usr/bin/env perl
@roger = ..;
@other = ..;
push @roger,@other; #@other数组压入@roger数组中
print @roger."\n";

9.   数组内插.

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

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

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

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

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

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

10.  foreach循环

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

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

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

Perl 学习笔记-列表和数组的更多相关文章

  1. RX学习笔记:JavaScript数组操作

    RX学习笔记:JavaScript数组操作 2016-07-03 增删元素 unshift() 在数组开关添加元素 array.unshift("value"); array.un ...

  2. Go语言学习笔记八: 数组

    Go语言学习笔记八: 数组 数组地球人都知道.所以只说说Go语言的特殊(奇葩)写法. 我一直在想一个人参与了两种语言的设计,但是最后两种语言的语法差异这么大.这是自己否定自己么,为什么不与之前统一一下 ...

  3. 《python基础教程(第二版)》学习笔记 列表/元组(第2章)

    <python基础教程(第二版)>学习笔记 列表/元组(第2章)序列中的下标从0开始x='ABC' ==> x[0]='A', x[1]='B', x[2]='C'负数索引从右边开始 ...

  4. C语言学习笔记之成员数组和指针

    成员数组和指针是我们c语言中一个非常重要的知识点,记得以前在大学时老师一直要我们做这类的练习了,但是最的还是忘记了,今天来恶补一下.     单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个 ...

  5. perl 学习笔记

    一:基础 1:安装perl      centos: yum -y install perl       官网:https://www.perl.org/      升级到5.22:先下载,执行./i ...

  6. perl学习(3) 列表

      列表或称为数组,和c语言中的数据类似,只是perl自己特殊的一些写法. 1.1.定义 一个列表或者数组可以包含数字,字符串,undef 值,或者任意不同类型的标量值的组合,但是这些元素的类型通常是 ...

  7. 【Redis】命令学习笔记——列表(list)+集合(set)+有序集合(sorted set)(17+15+20个超全字典版)

    本篇基于redis 4.0.11版本,学习列表(list)和集合(set)和有序集合(sorted set)相关命令. 列表按照插入顺序排序,可重复,可以添加一个元素到列表的头部(左边)或者尾部(右边 ...

  8. matlab学习笔记12单元数组和元胞数组 cell,celldisp,iscell,isa,deal,cellfun,num2cell,size

    一起来学matlab-matlab学习笔记12 12_1 单元数组和元胞数组 cell array --cell,celldisp,iscell,isa,deal,cellfun,num2cell,s ...

  9. matlab学习笔记11_3高维数组操作 filp, shiftdim, size, permute, ipermute

    一起来学matlab-matlab学习笔记11 11_3 高维数组处理和运算 filp, shiftdim, size, permute, ipermute 觉得有用的话,欢迎一起讨论相互学习~Fol ...

随机推荐

  1. zookeeper基本讲解(Java版,真心不错)

    1. 概述 Zookeeper是Hadoop的一个子项目,它是分布式系统中的协调系统,可提供的服务主要有:配置服务.名字服务.分布式同步.组服务等. 它有如下的一些特点: 简单 Zookeeper的核 ...

  2. Java中RMI远程调用demo

    Java远程方法调用,即Java RMI(Java Remote Method Invocation),一种用于实现远程过程调用的应用程序编程接口.它使客户机上运行的程序可以调用远程服务器上的对象.远 ...

  3. input标签存在的兼容问题?

    当input标签在type为text时,在Firefox和Safari中的默认高度为22像素(包括上下边框)宽度为146像素(包括左右边框),而在IE中的默认高度为24像素,而宽度却和Firefox和 ...

  4. OD 实验(十六) - 从对话框入手对程序的逆向

    对话框: 对话框从类型上分为两类:modal 对话框和 modeless 对话框,就是模态对话框和非模态对话框,也有叫成模式和非模式 模态对话框不允许用户在不同窗口间进行切换,非模态对话框允许用户在不 ...

  5. OD 实验(九) - 对一个程序的破解

    程序: 运行程序 点击 About 这是要注册的 点击 Register 输入邮箱和注册码,点击 Register Now 逆向: 用 OD 打开程序 右键 -> 查找 -> 所有参考文本 ...

  6. 0CTF题中的神奇宝贝WP

    前言: 今天被尘少拉去做题 然后做到一个脑洞打开的题..... 神奇宝贝!?!? 正文: 一开始来到这=-= 弱密码猜测:admin admin 验证码用calc去算 然后成功进入 第一次去做神奇宝贝 ...

  7. ascii码与二进制码有何区别?

    ascii编码和二进制码是两个概念.ASCII主要是为了电脑显示和传输拉丁字母而发明的一套编码,二进制则是为了计算机方便计算.传输数据而使用的一种方法.ASCII(American Standard ...

  8. 版本控制git之一 - 仓库管理

    git 再开始这个话题之前,让我想起了一件很痛苦的事情,在我大学写毕业论文的时候,我当时的文件是这样保存的 毕业论文_初稿.doc 毕业论文_修改1.doc 毕业论文_修改2.doc 毕业论文_修改3 ...

  9. mysql 乱码 utf8

    my.ini [mysql]default-character-set=utf8 [mysqld]character-set-server=utf8 show variables like '%cha ...

  10. RocketMQ初探(二)之RocketMQ3.26版本搭建(含简单Demo测试案例)

    作为一名程序猿,要敢于直面各种现实,脾气要好,心态要棒,纵使Bug虐我千百遍,我待它如初恋,方法也有千万种,一条路不行,换条路走走,方向对了,只要前行,总会上了罗马的道. Apache4.x最新版本既 ...