perl学习笔记.docx

上传人:b****5 文档编号:8050898 上传时间:2023-01-28 格式:DOCX 页数:12 大小:21.85KB
下载 相关 举报
perl学习笔记.docx_第1页
第1页 / 共12页
perl学习笔记.docx_第2页
第2页 / 共12页
perl学习笔记.docx_第3页
第3页 / 共12页
perl学习笔记.docx_第4页
第4页 / 共12页
perl学习笔记.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

perl学习笔记.docx

《perl学习笔记.docx》由会员分享,可在线阅读,更多相关《perl学习笔记.docx(12页珍藏版)》请在冰豆网上搜索。

perl学习笔记.docx

perl学习笔记

Perl快速入门

1、标量

标量是一种变量,只能保存单个值、单个字符串或单个数字。

标量名必须以美元符号“$”开头。

标量上下文则负责表明当前正在使用单个值的情况

EXAMPLE

$first_name="Melanie";

$last_name="Quigley";

$salary=125000.00;

print$first_name,$last_name,$salary;

2、数组

数组是一组有序排列的标量,如字符串和/或数字。

数组中的各个元素由从0开始的整数来索

引。

数组变量名以“@”符号开头

@names=("Jessica","Michelle","Linda");

print"$names";#Printsthearraywithelementsseparatedbyaspace

print"$names[0]and$names[2]";#Prints"Jessica"and"Linda"

print"$names[-1]\n";#Prints"Linda"

$names[3]="Nicole";#Assignanewvalueasthe4thelement

下面是一些常用的内建函数:

pop移除最后一个元素

push把新元素添加到数组末尾

shift移除第一个元素

unshift把新元素添加到数组开头

splice在数组指定位置添加或移除数组元素

sort对数组元素进行排序

3、散列

关联数组(associativearray),又称为散列(hash),是一组未经排序的键/值对(key-value

pair),并通过字符串进行索引。

散列变量名以“%”号开头(请注意,若位于单引号或双引号中的话,%符号将不会解析)

EXAMPLE

%employee=(

"Name"=>"JessicaSavage",

"Phone"=>"(925)555-1274",

"Position"=>"CEO");

Print$employee{"Name"};#Printavalue

$employee{"SSN"}="999-333-2345";#Assignakey/value

4、预定义变量

Perl提供了大量的预定义变量。

下面列举了常用的一些预定义变量:

$_在执行输入和模式搜索操作时使用的默认空格变量

$.文件中最后处理的当前行号

$@由最近一个eval()运算符提供的Perl语法报错信息

$!

获取当前错误信息值,常用于die命令

$0含有正在执行的程序名

$$正在执行本脚本的Perl进程号

$PERL_VERSION/$^VPerl解释器的版本、子版本和修订版本信息

@ARGV含有命令行参数

ARGV一个特殊的文件句柄,用于遍历@ARGV中出现的所有文件名

@INC库文件的搜索路径

@_在子例程中,@_变量含有传给该子例程的变量内容

%ENV关联数组型变量%ENV含有当前环境信息

%SIG关联数组型变量%SIG含有指向信号内容的句柄

5、常量

固定不变的值,一旦设置就不能再更改。

典型的常量包括PI,或一英里长度的英尺数。

这些值都是从不变化的。

用户可借助constant保留字来定义常量,这里给出示例如下:

EXAMPLE

useconstantBUFFER_SIZE=>4096;

useconstantPI=>4*atan21,1;

useconstantDEBUGGING=>0;

usecontstantISBN=>"0-13-028251-0";

PI=6;#CannotmodifyPI;producesanerror.

6、运算符

Perl提供了多种运算符,但是其主要内容与C/C++、Java或PHP运算符类似。

运算符包括如下几种

赋值运算符=、+=、-=、*=、%=、^=、&=、|=、.=

算术相等==、!

=、<=>

字符串相等eq、ne、cmp

算术大小关系>、>=、<、<=

字符串大小关系gt、ge、lt、le

范围运算符5..10#范围是5至10之间,逐个递增

逻辑运算符&&、and、||、or、XOR、xor、!

自动递增/递减++、--

文件运算符-r、-w、-x、-o、-e、-z、-s、-f、-d、-l,等等

位运算符~、&、|、^、<<、>>

字符串连接.

字符串复制x

代数运算符*、/、-、+、%

模式匹配=~、!

~

EXAMPLE

print"\nArithmeticOperators\n";

print((3+2)*(5-3)/2);

print"\nStringOperators\n";#Concatenation

print"\tTommy".''."Savage";

print"\nComparisonOperators\n";

print5>=3,"\n";

print47==23,"\n";

print"\nLogicalOperators\n";

$a>$b&&$b<100

$answereq"yes"||$money==200

print"\nCombinedAssignmentOperators\n";

$a=47;

$a+=3;#shortfor$a=$a+3

$a++;#autoincrement

print$a;#Prints51

print"\nPatternMatchingOperators\n"

$color="green";

printif$color=~/^gr/;#$colormatchesapattern

#startingwith'gr'

$answer="Yes";

printif$answer!

~/[Yy]/;#$answermatchesapattern

#containing'Y'or'y'

7、if语句

基本的if语句能够判断小括号内的表达式取值,如果值为true,则执行其后跟随的表达式。

 if(表达式){

       语句;

      }

EXAMPLE

if($a==$b){print"$aisequalto$b";}

8、if/else语句 

if/else实现了双向判断。

如果if后面表达式条件为true,则执行其后的语句;

否则执行else后面的语句。

 if(表达式){

语句;

}else{

语句;

}

EXAMPLE

$coin_toss=int(rand

(2))+1;#Generatearandom#numberbetween1and2

if($coin_toss==1){

print"YoutossedHEAD\n";

}

else{

print"YoutossedTAIL\n";

}

9、if/elsif语句 

if/elsif/else提供了多路分支选择功能。

如果if后面的表达式值不是true,则会依次判断其后每个elsif的条件,直到其中某个条件值为true;如果没有一个为true的话,则执行最后的else语句。

      if(表达式){

      语句;

      elsif(表达式){

      语句;

      }elsif(表达式){

      语句;

      else{

      语句;

      }

EXAMPLE

#1isMonday,7Sunday

$day_of_week=int(rand(7))+1;

print"Todayis:

$day_of_week\n";

if($day_of_week>=1&&$day_of_week<=4){

print"Businesshoursarefrom9amto9pm\n";

}

elsif($day_of_week==5){

print"Businesshoursarefrom9amto6pm\n";

}

else{

print"Weareclosedonweekends\n";

}

10、if/else简化模式

和C/C++类似,Perl也为if/else语法结构提供了相应的简化模式,该模式拥有两个运算符和三个操作数(因此又称为三元运算符)。

如果条件值为true,则执行紧跟在问号后面的语句;如果是false,则执行冒号后面的语句。

其格式为:

(条件)?

条件为true时执行的语句:

条件为false时执行的语句

EXAMPLE

$coin_toss=int(rand

(2))+1;#Generatearandomnumber#between1and2

print($coin_toss==1?

"YoutossedHEAD\n":

"YoutossedTAIL\n");

11、while循环、do-while循环

循环结构能够指定一段重复执行多次的代码。

Perl支持多种不同类型的循环:

while循环、do-while循环、for循环以及foreach循环。

while/until循环  

while循环:

     while后面跟随一个以小括号包围起来的表达式,以及一段执行语句。

当表达式取值为true时,便继续执行循环内容。

其语法结构为:

while(条件表达式){

代码段A

}

EXAMPLE

$count=0;

while($count<10){

print$count;

$count++;

}

12、until循环:

until后面跟随一个以小括号包围起来的表达式,以及一段执行语句。

当表达式取值为false时,继续执行循环内容。

其语法结构为:

until(条件表达式){代码段A

}

EXAMPLE

$count=0;

until($count==10){

print$count;

$count++;

}

13、do-while循环   

do-while循环类似于while循环,所不同的是它是在循环体末尾检查循环表达式的,而不是在开头检查。

这就保证了循环体至少能执行一次。

  其代码结构为:

do{

代码段A

}while(表达式);

EXAMPLE

$count=0;

do{

print"$count";

$count++;}

while($count<10);

14、for循环     

for循环需要判断三个条件表达式的取值,各表达式之间以分号隔开。

第一个表达式负责初始化变量,在整个循环过程中只调用一次。

第二个表达式负责判断条件值是否为true,如果是true的话便执行循环体;否则就退出循环。

当循环体执行完毕后,控制权便转移到第三个表达式,由它负责更新待检测变量的值。

然后,再由第二个表达式进行下一次判断,如此反复。

其代码结构如下所示:

for(初始化鍬量;条件表达式;自加/自减)

{代嗎段

}

EXAMPLE

for($count=0;$count<10;$count=$count+1){

print"$count\n";

}

15、foreach循环   

foreach循环仅用于逐个遍历列表(list)内容。

foreach$列表项(@列表){

print$列表项,"\n";

}

EXAMPLE

@dessert=("icecream","cake","pudding","fruit");

foreach$choice(@dessert){

print"Dessertchoiceis:

$choice\n";

}

16、循环控制 last/next   

last语句可用于从循环体中跳出一个循环。

next语句可用于跳过当前这次循环的剩余内容,直接从头开始下一轮循环。

EXAMPLE

$n=0;

while($n<10){

print$n;

if($n==3){

last;}

$n++;

}print"Outoftheloop";

EXAMPLE

for($n=0;$n<10;$n++){

if($n==3){

next;#Startattopofloop;#skipremainingstatementsinblock

}

echo"$n";

}print"Outoftheloop";

17、函数(function)

是一组能完成某项任务的代码体,并供程序其他部分调用。

用户可以通过参数将数据传送给这个函数。

函数可以有返回值,也可以不返回任何值。

任何合法的Perl代码均可出现在函数体的定义中。

定义于函数外面的变量在函数体内也同样可用。

而my函数则能把指定的变量局部化。

subfunction_name{

函数体

}

EXAMPLE

subgreetings(){

print"WelcometoPerl!


";#Functiondefinition

}

&greetings;#Functioncall

greetings();#Functioncall

EXAMPLE

$my_year=2000;

if(is_leap_year($my_year)){#Callfunctionwithanargument

print"$my_yearisaleapyear\n";

}

else{

print"$my_yearisnotaleapyear";

}

subis_leap_year{#Functiondefinition

my$year=shift(@_);#Shiftofftheyearfrom#theparameterlist,@_

return((($year%4==0)&&($year%100!

=0))||($year%400==0))?

1:

0;

}

18、文件处理

Perl提供了open函数用于打开文件,也提供了pipe,用于读写、追加文件内容。

其中,open函数的参数包括一个用户自定义的文件句柄(一般表现为一串大写字符),以及一个含有文件路径和读/写/追加标志的字符串

EXAMPLE

Toopenafileforreading:

open(FH,"

open(DB,"/home/ellie/myfile")ordie"Can'topenfile:

$!

\n";

Toopenafileforwriting:

open(FH,">filename");#Opens"filename"forwriting.#Createsortruncatesfile.

Toopenafileforappending:

open(FH,">>filename");#Opens"filename"forappending.#Createsorappendstofile.

Toopenafileforreadingandwriting:

open(FH,"+

open(FH,"+>filename");#Opens"filename"forwrite,thenread.

Tocloseafile:

close(FH);

Toreadfromafile:

while(){print;}#Readonelineatatimefromfile.

@lines=;#Slurpalllinesintoanarray.

print"@lines\n";

Towritetoafile:

open(FH,">file")ordie"Can'topenfile:

$!

\n";

printFH"Thislineiswrittentothefilejustopened.\n";

printFH"Andthislineisalsowrittentothefilejustopened.\n";

EXAMPLE

ToTestFileAttributes

print"Fileisreadable,writeable,andexecutable\n"if-r$fileand

-w_and-x_;#Isitreadble,writeable,andexecutable?

print"Filewaslastmodified",-M$file,"daysago.\n";#Whenwasitlastmodified?

print"Fileisadirectory.\n"if-d$file;#Isitadirectory?

19、管道

管道用于把系统命令输出内容作为输入流传送给Perl,或者将Perl的输出内容转发给系统命令以作为其输入。

管道又称作过滤器(filter)。

用户必须通过open系统调用来使用管道。

该系统调用接受两个参数:

一个用户自定义的句柄和一个操作系统命令,并需在操作系统命令的前面或者后面加上一个“|”符号。

如果“|”符号出现在命令之前,则表示该命令将把Perl的输出作为输入内容;否则表示Perl将读取该命令的输出内容。

也就是说,如果命令后面带有“|”,就表示Perl将从管道中读取输入内容;否则说明Perl将把输出内容写入到管道中去。

EXAMPLE

Inputfilter

open(F,"ls|")ordie;#Openapipetoreadfrom

while(){print;}#PrintslistofUNIXfiles

Outputfiler

open(SORT,"|sort")ordie;#Openpipetowriteto

printSORT"dogs\ncats\nbirds\n"#Sortsbirds,cats,dogsonseparatelines.

20、正则表达式

所谓正则表达式,是由斜杠圈起的一组字符集合。

它们可用于在文本中匹配指定模式,并进行相应替换操作。

一直以来,Perl都因为其优秀的模式匹配机制而闻名于世。

元字符表达含义

^  匹配行首

$  匹配行尾

a.c  匹配一个a,后面任意单个字符,再后面是一个c的情况

[abc]  匹配a或者b或者c的情况

[^abc] 匹配字符既不是a又不是b也不是c的情况 

[0-9]  匹配位于0到9之间的单个数字

ab*c  匹配一个a后面跟0到多个b,最后是一个c的情况

ab+c  匹配一个a后面跟1到多个b,最后是一个c的情况

ab?

c  匹配一个a后面跟0到1个b,最后是一个c的情况

(ab)+c 匹配1到多个ab后面跟着1个c的情况

(ab)(c) 捕获ab并将其值赋予变量$1,同时捕获c值并赋予$2

EXAMPLE

$_="lookingforaneedleinahaystack";

printif/needle/;

If$_containsneedle,thestringisprinted.

$_="lookingforaneedleinahaystack";#Usingregularexpressionmetacharacters

printif/^[Nn]..dle/;

#charactersand"dle".

$str="Iamfeelingblue,blue,blue..."

$str=~s/blue/upbeat/;#Substitutefirstoccurrenceof"blue"with"upbeat"

print$str;

Iamfeelingupbeat,blue,blue...

$str="IamfeelingBLue,BLUE...";

$str=~s/blue/upbeat/ig;#Ignorecase,globalsubstitution

print$str;

Iamfeelingupbeat,upbeat...

$str="PeaceandWar";

$str=~s/(Peace)and(War)/$2,$1/i;#$1gets'Peace',$2gets'War'

print$str;

WarandPeace.

$str="Hegaveme5dollars.\n"

s/5/6*7/e;#Ratherthanstringsubstitution,evaluatereplacementside

print$str;

Hegaveme42dollars."

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

当前位置:首页 > 工作范文 > 行政公文

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

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