Perl总结.docx

上传人:b****6 文档编号:6131278 上传时间:2023-01-04 格式:DOCX 页数:15 大小:24.73KB
下载 相关 举报
Perl总结.docx_第1页
第1页 / 共15页
Perl总结.docx_第2页
第2页 / 共15页
Perl总结.docx_第3页
第3页 / 共15页
Perl总结.docx_第4页
第4页 / 共15页
Perl总结.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

Perl总结.docx

《Perl总结.docx》由会员分享,可在线阅读,更多相关《Perl总结.docx(15页珍藏版)》请在冰豆网上搜索。

Perl总结.docx

Perl总结

merge_range和write_unicode函数在直接使用列号或者行号表示区域时都以0开始,(0,0)表示A1,(0,1)表示B1

但是用字母表示时却不一样。

例如:

A1,B5,一个就表示了具体的行号和列号

$totalworksheet->write_unicode(0,0,$maps->to_unicode("名称"),$format);

$totalworksheet->write_unicode(0,1,$maps->to_unicode("总量"),$format);

 

第二章标量与数据

1.#!

/usr/bin/perl是系统中Perl所在的路径

2.Perl程序并不需要变量声明的部分,所有变量可以直接使用。

但是如果想提前声明也可以。

3.换行符\n

最好在每一行输出的信息的末尾加上换行符,使得程序执行完后SHELL的提示符出现在

新的一行的开始,而不是在输出内容的后面。

4.反引号``运行一个外部命令,使用一对反引号来调用。

反引号和单引号不同,注意别搞混了。

5.perldoc-u-fatan2>d:

/temp

可以将命令执行结果和输出内容导入别的文件。

6.标量SCALAR用于称呼单件事物,是Perl中最简单的数据类型。

类似于别的语言的常量和变量

7.双精度浮点数

所有的数字都以这种形式存储和参加运算,不区分小数,整数或者浮点数等。

但是在程序代码中书写时还是可以用各自的直接量来表示的。

例如:

浮点数直接量,整数直接量等

8.运算符

+-*/

%求余(取模)

**乘冥

9.字符串

由可输入的字母,字符和数字任意组合而成。

最短为空字符,长度无限制。

字符串直接量有两种不同的形式:

单引号和双引号内的字符串

1)。

单引号字符串中要表示多行数据时可以直接加入回车换行,按下“Enter”键。

反斜线\n不再表示换行,而是显示\n

除了单引号和反斜线以外,单引号内的所有字符都代表它们自己,包括换行符本身。

2)。

双引号内的字符串直接量,反斜线拥有更强大的,更完整的能力,可用来表示控制字符,也可以用八进制或者十六进制表示任何字符,实现双引号内的反斜线转义。

双引号内的字符串可以实现变量内插,单引号内的不能实现内插,但是可以外串。

例如:

$temp=“teststringappend”;

print“Theprogramisto$temp\n”;

print‘Theprogramisto$temp’.”\n”;

print‘Theprogramisto‘.$temp.”\n”;

PAGE33

10.字符串连接用“.”句点符号连接多个字符串,实现拼接

字符串重复字符串X次数实现将左边的字符串重复多次显示。

左操作数是重复的字符串,右操作数是重复的次数。

先取整,如果小于1,则产生长度为0的空字符串。

11.接收从键盘输入的资料,必须以回车结束,所有最后一个字符为回车符。

12.chomp操作符去掉字符串末尾的回车符,只能去掉一个,就是最后的一个换行符。

处理字符串变量时,它是去掉行末换行符的最佳方式。

13.undef值在赋值之前被使用时,该变量的值就是undef值,它不是空字符串或者0,但是根据变量的赋值可以将undef值当作空字符串或者0来处理。

可以通过defined函数来判断是否为undef值。

可以通过undef关键字来自己构造初始值为undef值的变量。

14.defined函数如果是undef,则返回假,否则返回真。

第三章列表与数组

标量代表的是单数,列表和数组代表的是复数。

列表是标量的有序集合,而数组是存储列表的变量。

列表和数组中的每个元素都是单独的标量变量,拥有单独的标量值,而且这些值是互不相关的,是有序的。

各个标量变量的类型可以不一样,可以是数字,字符串,undef等的混合。

每个元素是有序的,先后次序是固定。

可以通过下标来访问。

下标从0开始,没有上下限。

如果超出,则得到undef值。

1.访问数组的元素

2.特殊的数组索引值索引值可以超出数组的索引范围,超出时可以自动扩大数组,扩大产生的标量默认值为undef。

3.列表直接量一对圆括号中用逗号隔开的一系列值。

可以使用范围标识符.

例如:

(1..100)(5..1)为空列表,仅向上计数,

4.qw简写可以建立简单的单词、字符串列表。

每个列表标量相当于是单引号内的字符串,忽略所有的回车符,空白,控制符等。

用空白隔开的各个字符串,省掉单引号。

定界符可以是圆括号和其他Perl允许的任何一对标点符号。

如果是括号类的,左右可以不一样,但是如果是别的,则必须左右一样。

5.pop/push操作符pop的操作数和push的第一个操作数必须是数组变量,不能是列表直接量

pop操作符弹出数组的最后一个元素并从数组中删除

push操作符在数组的末端加入一个或者一串数据

6.shift/unshift操作符shift的操作数和unshift的第一个操作数必须是数组变量,不能是列表直接量

shift操作符弹出数组最左端的第一个元素并从数组中删除

unshift操作符在数组的最左端加入一个或者一串数据

pop/push操作符是对数组的末端处理,而shift/unshift操作符是对数组的最左端进行处理。

7.Foreach中的循环控制变量并不是列表元素的复制品,而是列表元素本身,因此,循环中修改了控制变量,就相当于修改了列表元素。

@colors=qw/redgreenyellowwhiteblack/;

print"TheColorsare@colors.\n";#打印修改前的COLOR

foreach$color(@colors){

$color="\t$color";

$color.="\n";

}

print"TheColorsare:

\n",@colors;

输出结果:

8.默认变量$_

9.reverse操作符使列表或者数组内容反序,但是不能直接修改它本身的参数内容,只能将反序结果传给别的变量。

10.sort操作符按照ASCII的码序,对列表或者数组内容进行排序。

但是不能直接修改它本身的参数内容,只能将排序结果传给别的变量。

11.列表上下文和标量上下文

如果是给列表(不论其元素个数)赋值,则是列表上下文;如果是给标量赋值,则是标量上下文。

举例如下:

标量上下文:

$fred=something;

$fred[3]=something;

123+something

something+456

if(something){}

while(something){}

$fred[something]=something

列表上下文:

给列表赋值或者是作为参数列表时一定是列表上下文

@fred=something;

($fred,$bag)=something;

($test)=something;

push@fred,something;

foreach$fred(something){}

sortsomething

reversesomething

printsomething

在列表上下文中使用产生标量的表达式,如果表达式结果为标量值,则自动产生一个仅含此标量的列表。

undef是标量值,所以将undef赋值给数组时并不会清空该数组,而是产生一个仅有一个未定义元素的列表。

要清空数组或者列表时,直接赋值一个空列表就可以。

@test=undef;

@clear=();

强制指定标量上下文

scalar伪函数

第四章子程序

一.定义子程序

sub子程序名{}

定义时子程序名以字母、数字和下划线组成,有时也可包含“与号”,但是不能以数字开头。

子程序可以重名,但是后面的将覆盖掉前面的子程序。

二.调用子程序

在程序中直接通过子程序名(可以包含“与号”)来调用。

子程序被调用时一定是作为表达式的某一部分。

所有的子程序都会有返回值,就是程序最后执行的表达式的值。

不一定是最后一个语句。

但是如果有return操作符,则会返回某个值,而且退出子程序。

三.参数

Perl子程序可以接收参数,就是在调用时将参数放在子程序名后的括号中,以参数列表的形式传递,并且Perl会自动将参数列表化名为特殊的数组变量@_,该变量只在子程序执行期间有效。

子程序可以访问这个数组,判断参数的个数和具体的值,访问参数元素的方式为:

$_[0],$_[1]…..,但是这些变量和程序的自动变量$_没有任何关系。

访问超出参数个数也无所谓,只是得到undef值而已,多余不用的参数也会自动略去不用。

数组变量@_是每个子程序的私有变量,独自拥有,互不影响,即使有全局的数组变量@_,也不会混淆,各自独立。

四.子程序的私有变量

1.通过my操作符定义子程序的私有变量。

它也可以出现在Perl程序的任何位置,用于定义任何语句块的私有变量。

它只是改变变量的作用域,但是并不能更改变量所处的上下文。

例如:

my($num)=@_;#列表上下文,$num中会被设为第一个参数值

my$num=@_;#标量上下文,$num中会被设为参数个数

定义持久性私有变量state$num=0;

但是,在Perl5.10中,对于数组和哈希类型的state变量,如果处于列表上下文,则不能进行初始化。

目前,在列表上下文环境中初始化state变量是禁止的。

例如:

state@array=qw/abcd/;#错误

2.my操作符后的括号表示了my操作符的操作范围。

如果有括号,则表示改变括号内的所有变量的作用域,如果没有括号,则只是对紧跟它的单个变量起作用。

3.所有新变量的值一开始都是空的:

标量为undef,数组则为空列表。

4.usestrict;编译命令强制执行一些严格的,确保良好程序设计的规则。

 

第五章输入与输出

一.读取标准输入

1.行输入接收一行输入

行输入特例<>标准输入流

可以在处理程序的调用参数的时侯,使用钻石操作符来读取标准输入流。

可以不是从键盘,而是从客户指定的位置读取。

2.调用参数系统会自动存在特殊数组@ARGV中,其内容是由调用参数组成的列表。

二.标准输出

1.print读取列表中的所有值并输出到标准输出。

在输出中直接使用数组和数组内插方式,输出的效果是不同的。

直接使用数组进行输出时,会将数组的元素一个接着一个的输出,中间没有空白和其他分隔符;而使用数组内插方式时,每个元素之间一定会有一个空白来分隔输出。

例如:

@fred=qw/13579/;

$cnt=@fred;

print"Thenumberscountof(@fred)is$cnt\n";#输出结果为列表的元素个数。

print@fred,"\n";#输出结果:

13579

print"@fred\n";#输出结果:

13579

print(2+3)*4;#输出结果为5.

print((2+3)*4);#输出结果为20.

注意:

如果print后紧跟有左括号,则必须将要输出的内容全部放在右括号之前,否则只会输出括号内的列表内容。

三.格式化输出printf

1.%按照顺序插入参数值

%g输出恰当的数值形式,它会按照需要选择浮点数,整数或者指数等形式

%d输出十进制整数,无条件舍去小数部分,而非四舍五入。

%s字符串内插

%f输出浮点数,可以按照需要四舍五入。

格式为:

%总长度.小数位数f

%%可以输出真正的百分号

printf“Themonthlyinterestrateis:

%.2f%%”,5.25/12;

printf"\nThemonthlyinterestrate:

%.2f%%\n",5.25/12;#Theoutputresultis0.44

printf"\nThemonthlyinterestrate:

%.2f\%\n",5.25/12;#Theoutputresultis0.44

可以指定输出宽度。

宽度为正值,则输出内容右对齐,如果为负值,则输出内容左对齐。

如果超出指定宽度,系统自动扩展。

2.数组和printf

my@colors=qw/redgreenyellowwhiteblack/;

my$format="Iknowthecolors:

\n".("%10s\n"x@colors);

printf$format,@colors;

组合在一起:

标量上下文获取数组长度列表上下文获取数组内容

printf"Iknowthecolors:

\n".("%-10s\n"x@colors),@colors;

四.文件句柄

就是Perl程序中代表本身的Perl进程与外界I/O联系的名字。

它只是这种联系的名字,不一定是文件名。

建议用全大写字母来命名文件句柄,以下6个除外:

STDIN,STDOUT,STDERR,DATA,ARGV和ARGVOUT

五.say操作符

行输出语句,自动输出一行内容并且在最后进行换行。

第五章哈希

所谓哈希,就是一种特殊的数据结构,由哈希键和哈希值一一对应而形成的一批数据。

其中哈希键必须是字符串,而且必须唯一的,不能重复,但是,每个键对应的键值却是可以重复的,而且类型不限。

以哈希键进行存取。

一.访问哈希元素

1.要访问哈希元素,格式如下:

$hash_name{$some_key}哈希变量的命名和别的标识符一样,以字母,数字和下划线组成,不能以数字开始。

哈希赋值

$family_name{“fred”}=“aaaaa”;

$family_name{“merry”}=“jing”;

2.要访问整个哈希变量,用%哈希变量名

哈希赋值:

1)。

%family_name=%name

2)。

胖箭头的使用组成键值对

%family_name=(“A”=>1,“B”=>2,“C”=>3,“D”=>4,)

3)。

通过哈希键来赋值

$family_name{“fred”}=“aaaaa”;

$family_name{“merry”}=“jing”;

二.哈希函数

1.keys和values函数

keys函数获取哈希键,形成哈希键列表

values函数获取哈希值,形成哈希值列表

获取的两个列表中元素顺序不确定,但是这两个列表的各个元素却是一一对应,按顺序生成。

这两个函数在列表上下文中,得到列表,如果在标量上下文中,则得到哈希键的个数。

例如:

%char=("A"=>1,"B"=>2,"C"=>3,"D"=>4,);

@key=keys%char;#ABCD

@value=values%char;#1234

$key1=keys%char;#4

$value2=values%char;#4

2.each函数

获取哈希的每个键值对。

唯一适合用该函数的地方是while语句。

while(($key1,$value1)=each%char){

state$cnt=0;

$cnt+=1;

print"Thehash$cntKey/Valueis:

\n$key1=>$value1\n";

}

哈希中的键值可以是undef,表示虽然有键,但是值却未定义。

3.exists函数

判断某个键在哈希中是否存在,返回真或者假。

与它是否有值无关。

例如:

if(exists$char{"E"}){

print"Thekeyalreadyexists.\n";

}else{

print"Thekeydon’texists.\n";

}

4.delete函数

从哈希中删除该键及其对应的值。

如果存在,直接删除,反之则结束删除动作,即相当于什么也不做,也不报错。

例如:

delete$char{“A”};

delete$char{“E”};

5.哈希值内插

可以将单一的哈希元素内插到双引号引起的字符串中,但是整个哈希的内插是不支持的。

例如:

#哈希元素插入

foreach$person(sortkeys%char){

if($char{$person}){

print"$personhas$char{$person}items.\n";

}

}

6.在双引号中需要转义才能输出本身的符号有:

$@\“

7.%ENV哈希系统内定哈希

print"PATHis$ENV{PATH}\n";

print"TEMPis$ENV{TEMP}\n";

print"TMPis$ENV{TMP}\n";

第六章漫游正则表达式王国

正则表达式和shell的文件名通配(glob)类似,但是不一样,不能混淆。

一.元字符

1.点号.任何单字符通配符,只能匹配一个字符,换行符除外。

\点号.匹配单个点号.

2反斜线\

在任何元字符前加上反斜线\,就会使它失去元字符的特殊功能,只表示字符本身。

3.星号*乘法操作符匹配它前面的内容零次或者任意次,只能是前面的内容重复出现多次或者零次。

4.点星结合.*可以匹配任意字符无限多次。

戏称此组合是捡破烂模式,能够通吃所有字符串。

5.+匹配前一个条目一次以上。

与*不同,星号匹配前一个条目0次或者多次。

6.?

匹配前一个条目一次或者0次。

就是表示前面的条目可以不出现或者只出现一次。

7.()圆括号或者小括号进行模式分组例如:

/(fred)+/fredfredfredfred….

/(fred)*/可以匹配任何字符串,包括空串

8.(。

)\表示反向引用

9.|或择一匹配

二.字符集简写

1.\d代表任意数字的字符集【0-9】

2.\w代表单词字符【A-Za-z0-9_】由字母,数字和下划线组成的标识符。

3.\s代表空白,相当于【\f\t\n\r】,它等于是包含五种空白的字符集:

换页、制表、换行、回车以及空格。

\s*匹配0个或者多个空白

\s+匹配一个以上空白

\h匹配横向空白,等价于【\t】

\v匹配纵向空白,等价于【\f\n\r】

\R匹配任何类型的断行

三.反义简写

^\d=\D

^\w=\W

^\s=\S

/[\dA-Fa-f]+/匹配十六进制数字

/[\d\D]/复合字符集匹配任意字符(包括换行符),匹配任何数字非数字字符

/…/i进行大小写无关的匹配

/…/s可以匹配任意字符,包括换行符

/…/x可以在/…/中加入空白和注释,注释也算空白,但是注释中不要出现匹配的定界符,容易搞混,以为模式的结束。

四.组合选项修饰符

/…/isx先后顺序不影响匹配的结果

五.绑定操作符

=~默认的情况下模式匹配的串是$_,使用绑定操作符,则能让Perl用右边的模式匹配左边的字符串,而非匹配$_。

第八章以正则表达式进行匹配

m//=//

m()m<>m{}m%%m+任何成对的定界符

一.锚位

^字符串开头

$字符串结尾/^\s*$/匹配空白行。

\b单词锚位,匹配任何单词的首尾

\B非单词边界锚位

二.不捕捉模式

(?

三.命名捕捉

(?

使用捕获串时的格式为:

$+{label},举例如下:

##!

c:

/perl/bin/perl-d-w

use5.010;

my$name='FredorBarney';

if($name=~m/(?

\w+)(?

:

and|or)(?

\w+)/){

say"Isaw$+{name1}and$+{name2}.";

}

四.模式测试程序

下面是一个有用的程序,用来检测输入的字符串是否能够被指定的模式检测通过。

可以将所有输入一行行读入,然后以给定的模式去匹配。

如果匹配成功,利用三个特殊的匹配变量($`,$&,$’)进行结果展示,否则会输出不匹配的信息。

#Ctrl+Z退出輸入

while(<>){

chomp;

if(/merry/){#给定的模式

print"Matched:

/$`<$&>$'/.\n";

}else{

print"NoMatch:

|$_|\n";

}

}

第九章用正则表达式处理文本

m/…/模式匹配相当于搜索功能

s/…/…/先进行模式匹配和定位,然后替换。

将前面的替换为后面的。

s/匹配串/替换串/

返回的是布尔值,成功为真,否则为假。

只能进行一次替换动作。

例如:

$_="He'soutbowlingwithBarneytonight.";

print"$_\n";

s/Barney/Fred/;

print"$_\n";

s/…/…/g/g修饰符可以让s/…/…/进行所有可能的、不重复的替换,实现全局替换。

s/\s+//g将任何连续的空白转换为一个空格。

s/^\s+//g删除开头的空白。

s/\s+$//g删除结尾的空白。

s/^\s+|\s+$//g同时删除开头和结尾的空白。

一.不同的定界符

1.s/…/…/有左右之分的,必须用两对,前后可以不一样,但是每对必须一致。

如果用没有左右之分的,用三个就可以。

例如:

s#^https:

//#//http:

//#

s{Merry}{Merry_Jing}

s[Merry]{Merry_Jing}

s#Merry_Jing#

二.可选修饰符

/s/i/x/g是可选修饰符,也可以在替换运算模式中使用,修饰符的顺序不影响替换结果

三.绑定操作符

=~用绑定操作符可以为s/…/…/指定不同的目标

四.大小写转换

以下是在替换模式中可以使用的转义字符,也可以用在双引号内的字符串中。

/U转义字符,会将替换字符串中其后的字符全部转换为大写的。

/L转义字符,会将替换字符串中其后的字符全部转换为小写的。

/E转义字符,结束大小写转换。

/l只会影响其后的第一个字符

/u只会影响其后的第一个字符

/u/L全部转换为小写,但是首字母大写。

五.split操作符

split操作符用拆分模式串“扫过”指定的字符串,匹配成功后返回各个子串列表,拆分模式串的内容则不会出现在各个子串中。

期间只要模式在某处匹配成功,该处就是一个子串的结尾,下一个子串的开头。

如果匹配不成功,则返回原字符串。

如果分隔符连续出现,则会出现空子串。

split操作符在转换后可能出现多个空子串,它保留开始的空子串,但是会省略结尾处的空子串。

例如:

#split操作符

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1