lPerl 学习笔记-列表和数组

笔记来自<<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]."\n";  #roger2
7 print $roger."\n";   #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\n";   #输出: $end=3
8 print $roger[$end]."\n";  #空的

5. 列表直接量:

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

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

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

1 #! usr/bin/env perl
2 $roger = 1;
3 $loger = 2;
4 ($roger,$loger) = ($loger,$roger);
5 print $roger."\n";  #2
6 print $loger."\n";  #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 "\n";

8.数组的push和pop操作

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

9.   数组内插.

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

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

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

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

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

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

10.

时间: 2024-10-05 04:45:02

lPerl 学习笔记-列表和数组的相关文章

Swift学习笔记四:数组和字典

最近一个月都在专心做unity3d的斗地主游戏,从早到晚,最后总算是搞出来了,其中的心酸只有自己知道.最近才有功夫闲下来,还是学习学习之前的老本行--asp.net,现在用.net做项目流行MVC,而不是之前的三层,既然技术在更新,只能不断学习,以适应新的技术潮流! 创建MVC工程 1.打开Visual studio2012,新建MVC4工程 2.选择工程属性,创建MVC工程 3.生成工程的目录 App_Start:启动文件的配置信息,包括很重要的RouteConfig路由注册信息 Conten

python学习第六天 - 列表(数组)

python当中的数组与java,c不太一样,数组相当于一个列表,一个列表中可以有,整型,字符串,浮点型等等. 定义格式如下: >>> list = [123,'小甲鱼',3.14] >>> list [123, '小甲鱼', 3.14] 介绍几种向列表中添加元素的方法 1.append() :向列表中增加新的元素,一次只能添加一个元素,默认添加到列表的末尾 >>> list.append('黑夜') >>> list [123, '

RX学习笔记:JavaScript数组操作

RX学习笔记:JavaScript数组操作 2016-07-03 增删元素 unshift() 在数组开关添加元素 array.unshift("value"); array.unshift(123); array.unshift("value1","value2"); push() 在数组末尾添加元素 array.push("value"); array.push(123); array.push("value1&

非计算机专业的码农C#学习笔记 五、数组和集合

数组和集合 1.数组问题Array (1)一维数组:int[] arr={1,2,3,5,5} string[] s={s,l,s,g} (2)二维数组:int[,] arr=new int[2,2]{{1,2},{3,4}} 类型[,] 数组名=new 类型[行数(元素数),列数(元素的子元素数]{{元素1,元素2},{元素…},…,} l  动态数组:类型[,] 数组名=new 类型[M,N],int M=””;int N=””; l  查看内部元素:foreach(int n in arr

VBA学习笔记之随机数&amp;数组redim

发现更简单的: a=Application.RandBetween(-10, 10) 直接生成-10到10之间的随机整数 关于二维数组Redim Preserve: 如果使用了 Preserve 关键字,就只能重定义数组最末维的大小,且根本不能改变维数的数目. 具体参考 1 如果使用了 Preserve 关键字,就只能重定义数组最末维的大小,且根本不能改变维数的数目.例如,如果数组就是一维的,则可以重定义该维的大小,因为它是最末维,也是仅有的一维.不过,如果数组是二维或更多维时,则只有改变其最末

《C语言学习笔记》指针数组及其应用

C语言中,最灵活但又容易出错的莫过于指针了.而指针数组,是在C中很常见的一个应用.指针数组的意思是说,这个数组存储的所有对象都为指针.除了存储对象为指针,即一个地址外,其它操作和普通数组完全一样. 1 #include <stdion.h> 2 3 int main() { 4 int i; 5 char *name[] = {"BASIC", "FORTRAN", "C++", "Pascal", "C

python学习笔记——列表操作

python列表操作--增 append:追加一条数据到列表的最后 name = ["Zhangsan","XiongDa","Lisi"] name.append("wangwu") print name 输出结果: ['Zhangsan', 'XiongDa', 'Lisi', 'wangwu'] insert:指定位置插入一条数据 name = ["Zhangsan","XiongDa&qu

HTML 学习笔记(列表)

HTML 列表 html中列表使用标签<ul>和 <ol>来实现,不同的行用标签<li>来实现 <li>中包含的就是列表每行的内容.列表包含有序列表<ol> 和 无序列表<ul> 定义列表 自定义列表不仅仅是一列项目,而是项目及其注释的组合. 自定义列表以 <dl> 标签开始.每个自定义列表项以 <dt> 开始.每个自定义列表项的定义以 <dd> 开始. 实例 不同类型的无序列表 <body&

python学习笔记—列表相关

python中的列表等同于其他编程语言中的数组 基本操作有: 1.插入,追加,修改,删除 name = ["Type99","M1A2","T-72","Leclerc"] print (name[2]) print (name[0:2]) print (name[1:-1]) print (name) name.insert(2,"Type96") #插入元素 print (name) name.appe