数组:

特殊的数组索引:加入对索引值超过数组尾端的元素进行赋值,数组将会根据需要自动扩大,只要有可用的内存分配给数组。意外增加的数组元素的值为undef.

$a[0]="aa";

$a[1]="bb";

$a[900]="99";

有时需要找出数组中最后一个元素的索引值,如对数组rocks而言。其最后一个元素的索引值为$#rocks,元素个数$#rocks+1。

数组最后一个元素也可以用#rokcs[-1]访问。-1表示倒数第一的意思。

列表直接量:

qw(quoted word)简写

如:qw(fred barney betty wilma dino)="fred","barney","betty","wilma","dino"

因为qw算是一种引用的形式,所以不能将将注释写在qw中。

有时人们喜欢每个元素单独成行,便于查看和增删:

qw(

  fred

  barney

  betty

  wilma

  dino

)

前面的例子是以()作为界定符,其实perl还允许以其他的标点符号作为界定符。常用的写法为:

qw| fred barney betty wilma dino |

qw# fred barney betty wilma dino #

qw/  fred barney betty wilma dino /

链表的赋值:

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

交换两个的值:($fred,$barney)=($barney,$fred)

赋值左边少于右边:($fred,$barney)=qw< flintstone rubble slate granite>;#忽略掉末尾两个元素

赋值 左边多于右边:($wilma,$dino)=qw[ flintstone];#$dino的值为undef

@(at)字符(近似定义数组):

注意:@giant=1..5;==@giant=qw/ 1 2 3 4 5/;

@copy=@quarry;是将quarrry中的数据全部拷贝到copy中,不是和C语言中指针一样,两者指向同一块空间。

push 和 pop操作符(处理数组的尾端,即把数组当作一个栈来用):

pop沒什么好说的,注意一下:pop @array;==pop (@array);就行

push 有沒什么好说的,注意:push @array,1..10向array中添加10个元素。和pop一样,push也可以拿掉括号。

shift 和unshift操作(处理数组的首端,即把数组当作一个队列来用):

类似pop和push操作,不细数了。

splice操作(添加或者移除数组中的某些值):

pop-push和shift-unshift操作符都是针对数组的尾部进行的操作,splice则是对数组的中间进行操作。

splice有四个操作符号,他最多可以接受四个参数(最后两个是可选的):

第一个为要操作的目标数组,第二个参数为操作的数组中的元素哦开始位置;

如果仅仅是这两个参数,Perl会把即定位置到末尾的元素全部取出来并且返回。

第三个参数为指定要操作的元素长度,

第四个参数是要替换的列表。之前我们看到的都是如何实现从数组中拿走元素,此时就可以补充新元素到数组中。

将第三个参数的值设置为0即可不删除地添加新的列表。

注意新插入元素的位置。

字符串中数组的内插:

简单例子:

需要注意的:写邮箱地址时用$email=”fred@bedrock.edu”//错误,可以写成$email=”fred\@bedrock.edu”.

另外一个需要注意的地方是:

如果需要在某一标量变量的后面接着写左方括号,则需要先将该方括号隔开,它才不至于为数组引用的一部分。如下:

foreach控制结构

#!D:\Perl\bin\perl
@rocks = qw / bedrocks slate Java /;
foreach $tmp(@rocks) {
print "ont rock is $tmp\n";
}

注意:控制变量并非是列表元素的复制品——实际上,他就是列表元素本身。如果在循环中修改了控制变量的值时那么列表的值也将修改。如下:

#!D:\Perl\bin\perl
@rocks = qw / bedrocks slate Java /;
foreach $tmp(@rocks) {
if ($tmp eq "slate" ) {
$tmp="slate222222";
}
}
foreach $tmp (@rocks) {
print "$tmp\n";
}

注意:同时控制变量再循环结束后会回到循环前面的值,如下:

#!D:\Perl\bin\perl
$tmp='tmp';
@rocks = qw / bedrocks slate Java /;
foreach $tmp(@rocks) {
print "tmp is $tmp.\n"
}
print "FINAL::tmp is $tmp.\n"

执行结果:

重要的默认变量:$_

如果在foreach循环开头省略控制变量,Perl就会用$_(在很多情况下当未告知Perl使用那一个变量或者数值时,Perl都会使用$_)。如下:

#!/usr/bin/perl
use strict;
use warnings;
foreach (..) {
print " $_ ";
}

revers操作符

reverse操作符读取列表中的值并按照相反的次序返回列表。

如:@wilma=reverse 6..10;

注意:如果要改变@fred的值的话需要使用:@fred=reverse @fred;

sort操作符

读取列表中元素的值并按照一定的顺序输出。

#!D:\Perl\bin\perl
use strict;
my @imple=qw/ bed slate rubble grantie/;
my @sor= sort (@imple);
print "@sor \n";
my @rev = reverse sort (@imple);
print "@rev \n"; my @numbers=sort ..;
print "@numbers \n"

仔细看本例中的执行结果,注意数字的输出情况。reverse sort 方法值得掌握。

注意:当使用use strict(强制程序员在使用变量前声明变量)时,变量定义前加一个my。

each 操作符

调用each可以返回数组中写一个元素所对应的两个值——元素的索引和值。

#!/usr/bin/perl

use warnings;
@rocks=qw /bed slate rubble grantie/;
while (($index,$value)=each @rocks) {
print "$index :$value\n";
}

标量上下文和列表上下文

这部分好像很难,主要看自己的开发经验。

在标量上下文中是i用产生列表的表达式

在列表上下问中使用产生标量的表达式

强制指定标量上下文

使用伪函数scalar。

列表上下文中<STDIN>

@lines=<STDIN>;

从键盘读取数据,每次读入一行(会将换行符也读进去),然后赋值给一个元素。结束标志:linux中是CTL+D windows中CTL+Z。

在一般的使用中,会利用chomp(@lines=<STDIN>);将读入的每一行末尾的换行符号去掉。

perl学习笔记二的更多相关文章

  1. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  2. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  3. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  4. JMX学习笔记(二)-Notification

    Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...

  5. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  6. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

  7. 《SQL必知必会》学习笔记二)

    <SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...

  8. NumPy学习笔记 二

    NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  9. Learning ROS for Robotics Programming Second Edition学习笔记(二) indigo tools

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

随机推荐

  1. 移动端web开发 浅析

    1. viewport ① viewport在移动端承载网页的区域:具有默认格式 ②设置viewport属性,适配移动端设备 主流设置: <meta name = ”viewport” cont ...

  2. 用Sublime搭建Python开发环境(windows)

    1.安装Python 3 去官网下载Python 3,网址:https://www.python.org/downloads/release/python-363/ 双击安装,勾选添加到环境变量. 有 ...

  3. inux下设置mysql数据库字符集utf8

    mysql中文乱码解决方法:将mysql数据库编码统一utf8 查看数据库编码: ? 1 <span style="font-size: 16px;"><stro ...

  4. sql 取一张表的全部外键

    select a.name as 约束名, object_name(b.parent_object_id) as 外键表, d.name as 外键列, object_name(b.reference ...

  5. Windows注册与删除mysql服务

    1.删除服务: (1)采用windows自带的服务管理工具:参考:http://www.cnblogs.com/qlqwjy/p/8010598.html sc delete MySQL57 (2)m ...

  6. [9018_1563][bzoj_2144]跳跳棋

    题目描述 Hzwer的跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 某一天,黄金大神和cjy用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置.他们 ...

  7. shortcut(NOIP模拟赛)(裸的排序)

    原题: Description Mirek有一条每天从他家去大学工作的最喜欢的路.这个路径由若干个部分组成,且每个部分是10米长的直线.每一个部分是直线连接(没有拐弯)上一个部分或垂直连接上一个部分. ...

  8. 华为上机测试题(及格分数线-java)

    PS:自己写的,自测试OK,供大家参考. /* 描述:10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下:(1) 及格线是10的倍数:(2) 保证至少有60%的学生及格:(3) 如果所有 ...

  9. 安全提示“X-Frame-Options头未设置”的解决方法

    漏洞检测提示“X-Frame-Options头未设置”,意思是网页可能被别人用iframe框架使用.事实上,我的网页已经通过js程序禁止被iframe框架嵌入使用了.不过,对于使用iis的网站来说,可 ...

  10. 计蒜客 18492.Upside down primes-米勒拉宾判大素数 (German Collegiate Programming Contest 2015 ACM-ICPC Asia Training League 暑假第一阶段第三场 K)

    K. Upside down primes 传送门 这个题就是把大数按字符串输进去,判断一下是不是素数,然后反转180度,先判断反转之后的东西是不是一个数,如果是的话,再把这个数判一下是不是素数,如果 ...