列表或称为数组,和c语言中的数据类似,只是perl自己特殊的一些写法。

1.1.定义

一个列表或者数组可以包含数字,字符串,undef 值,或者任意不同类型的标量值的组合,但是这些元素的类型通常是一致的。

数组下标:

·    数组中的元素是由连续整数编了号的,其从0 开始;

·    下标可以是任何能返回数值的表达式。如果其值不为整数,则自动将其转换为小于它的最大整数值。

·    如果下标超出了数组的范围,则其值为undef。这和通常的变量情况是一样的,如果没有值存放在变量中,则其为undef。

·    如果将一个元素存储在数组最后元素的后面的位置,数组会自动增长的

$rocks[0] = ‘slate’; #又一个

$rocks[1] = ‘lava’; #又一个

$rocks[2] = ‘crushed rock’;#又一个

$rocks[99] = ‘schist’; #现在有96 个undef 元素

·      数组的负数索引值从最后一个元素开始,$#name 返回最后一个元素的索引。

$rocks[-1] = ‘hard rock’;      #完成上例中的一种更简单的方法

$dead_rock = ‘rocks[-100]’; #得到‘bedrock’,第0 个元素

$rocks[-200] = ‘crystal’;       #严重错误(fatal error!)

$#rocks = 99

(0,2 .. 6,10,12)  #同(0,2,3,4,5,6,10,12)

($m ..$n)        #由$m 和$n 的值决定

($m+$o,$p+$q) #两个值

(“fred”, “barney”, “betty”, “wilma”, “dino”)

qw(fred barney betty wilma dino )       #同上,但输入更少

qw ! fred barney betty wilma dino !

qw# fred barney betty wilma dino # #有些像注释

qw( fred barney betty wilma dino )

qw{ fred barney betty wilma dino }

qw[ fred barney betty wilma dino ]

qw< fred barney betty wilma dino >

1.2.列表赋值

($fred, $barney, $dino) = (“flintstone”, “rubble”, undef);

($fred, $barney) = ($barney, $fred) #交换两个变量

引用这个数组时,Perl 有一种简单的写法,在数组名前加@(后没有中括号)来引用整个数组

@rocks = qw / bedrock slate lava /;

@tiny = (); #空表

@giant = 1..1e5; #包含1到105元素的表

@stuff = (@giant, undef, @giant); #包含200,001 个元素的表

@dino = “granite”;

@quarry = (@rocks, “crushed rock”, @tiny, $dino);

最后一个赋值语句将五个元素(bedrock, slate, lava, crushed, rock, granite)赋给变量@quarry,因为@tiny 没有元素。

特别的是,它没有undef 这个值,但可以像@stuff 那样明确的指定它。

还有一点需要注意的是数组名字被其列表值替换。

数组不能成为列表的一个元素的原因是数组只能包含标量值,不能包含其它的数组。

没有赋值的数组变量的值为( ),空表。和未初始化的标量变量为undef 类似,未被初始化的数组为空表。

@copy = @quarry; #将一个数组中的值拷贝的另一个数组中

1.3.插入和删除

Perl 程序员不使用索引,介绍几种不使用索引来操作数组的方法:

通常将数组类似于栈来使用,在其右边添加或者删除数据

pop 操作将数组的最后一个元素取出并返回;

@array = 5..9;

$fred = pop(@array); #$fred 得到9,@array 现在为(5,6,7,8)

push,它可以将一个元素(或者一列元素)加在数组的末尾:

@array = 5..6 ;

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 个元素(共有19 个)

unshift 和shift 对一个数组的开头进行操作(数组的左端有最小下标的元素)

@array = qw# dino fred barney #;

$m = shift (@array);      #$m 得到“dino”, @array 现在为(“fred”, “barney”)

$n = shift @array;         #$n 得到”fred”, @array 现在为(“barney”)

shift @array;                 #@array 现在为空

$o = shift @array;         #$o 得到undef, @arry 仍为空

unshift(@array,5);         #@array 现在为(5)

unshift @array,4;           #@array 现在为(4,5)

@others = 1..3;

unshift @array, @others;       #array 现在为(1,2,3,4,5)

和标量类似,数组也可以插入双引号的字符串中。插入的"数组元素"会自动由空格分开,插入的数组元素的第一个元素前面和最后一个元素后面不会插入空格,如果需要可以自己加入.

1.4.遍历

foreach 从列表的第一个元素一直循环执行到最后一个元素,一次迭代一个

控制变量不是这些列表元素中的一个拷贝而是这些元素本身。也就是说,如果在循环中修改这个变量,那原始列表中的元素也会被修改.

#! /usr/bin/perl

foreach $color(qw [red yellow block white])

{

        print "$color\n" ;

}

#

@rocks = qw/ bedrock slate lava /;

print "before foreach ,The rocks are:\n@rocks\n";

foreach $rock(@rocks){

        $rock ="\t$rock"; #@rocks 的每一个元素前加入一个tab

        $rock .= "\n"; #每一个元素后加一个换行符

        print "in foreach ,the rock is :$rock \n" ;

}

print "after foreach, The rocks are:\n@rocks";

程序结果:

如果在foreach 循环中省略了控制变量,那Perl 会使用其默认的变量:$_

foreach(1..10){ #使用默认的变量$_

print “I can count to $_!\n”;

}

#遍历

foreach(0..$#rocks)

{

print "$rocks[$_]";

}

1.5.排序

sort 操作将输入的一串列表(可能是数组)根据内部的字符顺序进行排序。如对于ASCII 字符串,将根据ASCII 序进行排

序。当然,ASCII 中有一些奇怪的地方,如大写字母在小写字符的前面,数字在字符的前面,而标点符号散布在各处。

#! /usr/bin/perl

@list = qw {111 2 test Test HUNAN 9 10} ;

@list = sort(@list);

foreach (@list)

{

print "$_\n";

}

1.6.其他函数

reverse(逆转)操作将输入的一串列表(可能是数组)按相反的顺序返回。

@fred = 6 ..10;

@barney = reverse (@fred); #得到10,9,8,7,6

1.7.标量和列表

标量就是【c】变量

列表就是【c】数组

Perl 中的表达式将根据其context 返回适当的值,列表or标量,例如,一个数组的“name”,在列表context 中,它返回列表元素;在标量context 中,它返回数组元素的个数。

@people = qw( fred barney betty );

@sorted = sort @people; #列表context:barney , betty, fred

$number = 42 + @people; #标量context:42+3,得到45

$fred = something; # 标量context

@pebbles = something; #列表context

($wilma,$betty) = something; #列表context

($dino) = something;     #列表context,dino取列表中的第一个值

下面是一些标量context:

$fred = something;

$fred[3] = something;

123 + something;

something + 654

if(something){… }

$fred[something] = something;

下面是一些列表context:

@fred = something;

($fred, $barney) = something;

($fred) = something;

push @fred, something;

foreach $fred(something)

sort something

reverse something

print something

偶尔你可能需要标量context而Perl 期望的是列表。这种情况下,可以使用函数scalar。它不是一个真实的函数因为其仅是告诉Perl 提供一个标量context

@rocks = qw(talc quartz jade obsidian);

print “How many rocks do you have?\n”;

print “I have ”, @rocks, “rocks!\n”; #错误,输出rocks 的名字

print “I have ”, scalar @rocks, “rocks!\n”; #正确,输出其数字

perl学习(3) 列表的更多相关文章

  1. Python学习02 列表 List

    Python学习02 列表 List Python列表 List Python中的列表(List)用逗号分隔,方括号包围(comma-separated values (items) between ...

  2. perl 学习笔记

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

  3. redis学习-散列表常用命令(hash)

    redis学习-散列表常用命令(hash)   hset,hmset:给指定散列表插入一个或者多个键值对 hget,hmget:获取指定散列表一个或者多个键值对的值 hgetall:获取所欲哦键值以及 ...

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

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

  5. perl学习之I/O基础

    1.从标准输入进行输入<STDIN> 2.从钻石操作符进行输入<> 3.参数调用@ARGV 4.向标准输出进行输出 5.用printf进行格式化输出 1.<STDIN&g ...

  6. Perl 学习笔记-列表和数组

    笔记来自<<Perl语言入门第5版>> 1. Perl中列表指标量的有序集合,数组则是存储列表的变量, 这两个术语经常混用,不过更精确地说,列表指数据,而数组指变量.数组的表示 ...

  7. perl学习之五:列表和数组

    列表及其形式 数组 数组的赋值 数组的读取 数组片段 数组函数 二维数组简介 总结 1.列表形式: 1.(item1,item2,...) 2.qw(item1 item2 item3 ...) 3. ...

  8. perl学习之路3

    Perl编程之路3 标签: perl 列表与数组   Perl里面代表复数的就是列表和数组 列表(list)指的是标量的有序集合, 而数组(array)则是存储列表的变量. 在Perl这两个属于尝尝混 ...

  9. perl学习之路1

    一切要从Hollo world开始 公司要用perl....啊, 不会只能自学了, 毕竟是公司啊, 不是学校...公司不学习就滚蛋了...惨惨惨 因为是学习嘛, 感觉开虚拟机比较麻烦所以直接用了个 瘟 ...

随机推荐

  1. JavaScript 实现Map

    var map=new Map(); map.put("a","A");map.put("b","B");map.put ...

  2. Android 新兴的UI模式——侧边导航栏【转】

    侧边导航栏也就是大家熟知的SliddingMenu,英文也叫Fly-In App Menu.Side Navigation等.当然谷歌现在已经推出类似这个效果的组件--Navigation Drawe ...

  3. Duanxx 的 STM32 学习: 中断向量表操作

  4. JavaWeb解释一下什么是 servlet?

    Servlet是一种独立于平台和协议的服务端的java技术,可以生成动态WEB页面与传统的CGI(计算机图形接口)和其他类似的CGI技术相比.Servlet具有更好的可移植性.更强大的功能,更少的投资 ...

  5. BZOJ 2173: 整数的lqp拆分( dp )

    靠着暴力+直觉搞出递推式 f(n) = ∑F(i)f(n-i) (1≤i≤n) (直接想大概也不会很复杂吧...). f(0)=0 感受一下这个递推式...因为和斐波那契有关..我们算一下f(n)+f ...

  6. C语言的指针变量

    C语言的指针变量 在C语言中,变量是固定范围的存储空间,它存储的是赋给他的值, 比如: ; /* 这里是定义一个整型变量a,并把12这个值存储在a的地址空间上 这个地址空间是系统随机分配的,对用户是透 ...

  7. 5.6.2 Number类型

    Number是与数字对应的引用类型.要创建Number对象,可以在调用Number构造函数时向其中传递相应的数值.例如: var numberObject=new Number(10); 与Boole ...

  8. JAVA_用_JCO连接_SAP,实现调用SAP_的_RFC_函数(整理)(附一篇看起来比较全面的说明)(JCO报错信息)

    // 获取RFC返回的字段值 11 JCoParameterList exportParam = function.getExportParameterList(); 12 String exPara ...

  9. PHP-变量(www.w3school.com.cn/php)

    写在前面: 变量可以形象的解释为信息的容器(存信息的东西).比如说$x=8,相当于把8给放到x里面,以后操作$x的时候就相当于操作8 >5+$x结果为13 ------------------- ...

  10. 一种CentOS图形界面的修复方法

    刚跳槽来这个公司,第一个任务是一块PCIE8120卡的应用开发.尼玛,别人来培训过.演示过的,现在居然没一个人能把别人演示的东西演示给我看!只好自己折腾去了.把服务器搬到自己旁边空位方便折腾,结果发现 ...