列表和数组

Perl里的列表和数组用于表示复数。列表是指有序集合,数组是存储列表的变量。数组和列表里每个元素都是独立互不相关的标量值。

  1. 在Perl中,数组的名字空间和标量的名字空间是完全分开的。

  2. 假如下标超出了,对应的值是undef。

  3. 如果对超过数组尾端的元素进行赋值,数组会自动扩大,增补元素默认为undef。只要有足够的内存的话,数组的长度是没有上限的。

  4. 数组最后一个元素的索引值是$#rocks。

列表直接量

列表是圆括号内包含一串由逗号隔开的数据。

(1,2,3..100) #1到100

qw简写

在Perl程序里,经常需要建立简单的单词列表,这时就需要使用qw简写,qw定界符也可以不同

qw(
      fred
      barney
      betty
      wilma
      dino
)

列表的赋值

列表值也可以赋予给变量
fred,dino)= ("rubble",undef);
在赋值过程中。如果变量的个数不等于给定的列表值个数,那么多出来的值会被忽略。而如果变量的个数多于给定的列表值个数,那么多出来的变量会被设置为undef。
例子

($FRED) = qw<rubble slate>;

若想引用整个数组,可以在数组名前加上@字符,这表示全部的,所有的。

@rocks = qw/ bedrock slate lava /;

pop和push操作符

Perl中常把数组当作堆栈来使用。pop推出,push推入。

shift和unshift操作符

shift和unshift处理的是数组的首部,shift是取出,unshift是放入。

splice操作符

splice是针对数组中间元素进行操作的,返回被切出的片段。它有4个参数,后两个是可选的:要操作的目标数组,要操作的元素的开始位置,操作的元素长度(设为0就是插入列表),替换列表(不一定和取走的片段一样长)

@array = qw(pebbles dino fred barney );
@removed = splice @array,1,2,qw(wilma);

字符串中的数组内插

数组的内容同样是可以被内插到双引号中的。

@rocks = qw{ slate rubble};
print "quartz @rocks \n";

foreach控制结构

foreach $value (qw / bed slate /){
    ...
}

如果在foreach循环开头省略控制变量,那么Perl就会用它自己的默认变量$_。

foreach(1..10)
{
  print" i can count $_";
}

reverse操作符

读取列表的值然后按照相反的次序返回该列表。

sort操作符

读取列表或者数组的值,然后进行排序。
如果要对数组进行排序,必须把排序后的结果存回数组

each操作符

对数组调用each,会返回数组中下一个元素所对应的索引和该元素的值。这是5.12版开始后的,在这之前each只能处理哈希键值对。

use 5.012;
@rock = qw/ bedrock slate /;
while( ($index,$value) = each @rock )
{
    say "$index : $value";
}

标量上下文和列表上下文

当Perl在解析表达式时,我们要么希望它返回一个标量,要么希望它返回一个列表。
例如

@people = qw( fred barney betty);
@list = @people; #得到3个人的列表
$n = @people; #得到数字3

强制指定标量上下文用scalar
**<STDIN>在标量上下文中会返回输入数据的下一行,在列表上下文中会返回所有剩下的行,直到文件结尾 **

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容