perl基础教程精华版

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

PERLPERL基础教程精华版基础教程精华版主讲:吴茂英上海交通大学主要内容„PERL简介„PERL脚本的编写„PERL变量„Perl语法„PERL与正则表达式„PERL示例PERL释义Practical Extraction and Report Language 实用摘录和报告语言,但它其实不是缩写Larry Wall,1987.12.18Perl的历史Perl的环境准备zUnix:大多数内置z一些软件也内置perl,比如apache/oraclezWindows:ActivePerl5.10.0Perl的工具编辑工具:notepad,viIDE:Komodo,Perl Dev KitCGI:Top perlstudio,Perl builder,perledit,perlwiz,Mod_perlPerl的功能z脚本语言,解释执行,无需编译z具有编译语言如c、Java的功能,又有shell脚本的方便z无数据类型区分,适于不太复杂的程序z适于不要求速度,不在乎内存CPU等系统资源的任务z强大的字符串处理功能z灵活或复杂的正则表达式z大多数平台支持,除了专用模块,可在不同平台运行Perl的应用„Web编程:CGI,XML处理„系统管理„网络编程(安全脚本).„数据库管理„图像处理„其他众多的领域。。。一个示例#!/usr/bin/perlPrint “This is my first perl program\n”;$a=;Print $a;z第一行:#!/usr/bin/perl  由什么程序执行以下的内容z注释:#z输入:z输出:printz$a:变量,无需指定数据类型perl的四种变量†Scalar:标量,以$开始,后面以字母或_开头,再后面可以是字母或数字†array:数组,列表,以@开头†Hash:哈希,散列,以%开头†文件:大写字母†区分大小写,$Var, $VAR, $var†内置变量$/,$@等字符串变量†由双引号或单引号标识的一组字符组成。†昀少0个字符(“”为空串),昀多可以占满内存,末尾不含null(‘\0’)†“${str}ing”= $str+ “ing”!= $string†记住一些常用的转义字符†print “the \$varis $var.”†注意单引号的用法:不替换、不转义$var=“str”;print“thisis$var”;#”thisisstr”print‘thisis$var’;#‘thisis$var’变量初值z未创建时状态为undef,到达文件尾也为undefz说明变量为未定义:undef $a;z用在条件判断中:if(undef $a)z代替不关心的变量:$s=“a:b:c:d;($a1,undef,undef,$d1)=split(/:/,$s);z如果有undef变量又不知在哪,可加‐w参数进行提示#!/usr/bin/perl ‐wz创建后状态为defined     一般用在条件判断中if(defined $a)z整数初值为0,字符串初值为空串””。一般未赋值就使用时$result = $undefined + 2; 相关函数†length():字符串长度†uc, lc, ucfirst, lcfirst:改变大小写函数†substr, index, pos:字符串函数†sin等三角函数†rand(), srand():随机发生函数$lastchar= chop($str) # 截去昀后一个字符$result = chomp($str) # 截去末尾的行分隔符(通常为”\n”),行分隔符由$/定义控制结构†if(condition1){}elsif(condition2){}else{}†unless(){}†until(){}†do{} until()†while(){}†do {} while ()†for(;;){}†foreach循环语句foreach†语法:foreach$w(list|array){statement}†()内可以是数组@a,也可以是列表(1,2,3)†数组元素值可以修改,列表则是常量†$w不影响本来已定义的变量$w,循环结束后恢复†可以用$a(@a)用相同的变量名称†示例:„foreach$a(@a){}用于数组„foreach$a(1,2,3,4){}用于列表„foreach$k(keys%h){}用于哈希/散列„foreach$a(@a[1,2,4]){}仅对数组部分元素„foreach(@a){}缺省循环变量为$_循环控制†last:退出循环†next:进入下一循环†redo:重新执行本次循环†goto:跳转†continue{statement}单行条件语句与循环语句†print $a if $a==0;†print $a unless($a==0);†print $a while ($a‐‐=0);†print $a until ($a‐‐==0)•用||,&&的条件语句:$a==0&&print $a;open(F,’file’)||die “can’t open”;•die函数:在控制台标准错误输出信息后退出程序。•warn:输出信息后不退出程序,只起警报作用。•$!:内部变量,包含错误代码。•$@:内部变量,包含错误信息。列表——数组的形式†形式:(1,”a”,2.3, $a, $x+1),其元素可以是数字、字符串、变量、表达式†空列表(),单元素列表(2)不同于标量2†qw(1 $a str)„()可以用其他符号表示,如„元素可以是数值、变量、不带引号的字符串,中间用空格分开范围表示的列表..:范围运算符,每次增加1,如1..3†(1..6)=(1,2,3,4,5,6)†(1,2..5,6)=(1,2,3,4,5,6)†(3..3)=(3)†(2.4..5.3)=(2.4,3.4,4.4)†(4.5..1.6)=()†(“aa”..”ad”)=(“aa”,”ab”,”ac”,”ad”)†$month=(’01’..’31’)†($a,$a+3)=(3,4,5,6) if $a=3数组——列表的存储†@a=(1,2,3),不同于$a,初始值为()†元素形式:$a[0]表示第一个元素,索引从0开始,$a[‐1]表示倒数第一个元素†数组的赋值:„@a=(1,2,3,4); @b=@a;„@b=(2,3); @a=(1,@a,4);„@a=; #从屏幕输入进行赋值,按下CTRL‐d结束„改变元素的值:$a[1]=3;„超出数组大小的元素赋值:$a[5]=6; #自动增长,其他元素为NULL„读取不存在的元素为空:$b = $a[6];数组的读出@a=(1,2,3);„$a=$a[1];„($x, $y, $z)=@a; Æ$x=1, $y=2, $z=3;„($x, $y)=@a; Æ$x=1, $y=2;„($a,$b,$c,$d)=@a; Æ$a=1, $b=2, $c=3, $d=“”;„$a=@a=$#a+1; # $a为数组长度,$#a为数组的昀后一个元素的索引„($a)=@a; # 数组的第一个元素$a[0]„打印数组:print @a; # 元素直接相连print “@a”; # 元素之间用空格分开数组片段@a=(1..5)„@sub=@a[0,1,3];„@a[1,3]=(“a”,”b”);„@b=(1,2,3); @sub=@a[@b];„@a[1,2]=@a[2,1];„@a[1,2,3]=@a[3,2,4];数组操作函数†sort:缺省按字母排序$a, $b表示数组元素,@_代表数组本身„reverse @a; # 取数组的逆序„chop @a; # 每个元素截去昀后一个字符„shift(@a); # 删除数组第一个元素并返回该值,缺省对@ARGV数组„unshift(@a); # 在数组头部添加元素,返回新数组长度„push(@a,$a); # 在数组末尾添加元素„pop(@a); # 删除数组末尾元素数组操作函数(二)†join(连接符号, @a)把数组连接为一个字串@a=(‘a’,’b’); join(‘:’, @a)=“a:b”;†split(/分隔符/, 分割串, 长度)分隔符:缺省为空格,可省略分割串:缺省为$_,可省略长度:可省略,缺省为全部分割$s=“a,b,c”; @a=split(/,/,$s); Æ@a=(‘a’,’b’,’c’);@a=split(/,/,$s, 2); Æ@a=(‘a’,’b’,’c’);数组函数(三)†splice函数:@ret = splice(@a, skip, length, @newlist);z对数组@a进行操作,跳过skip个元素,然后用@newlist替换length个元素z@newlist长度可以不为length,但其替换长度总为lengthz如果length=0表示为插入;如果@newlist=()则表示为删除z当length和@newlist都省略时表示全部删除†@found=grep(/pattern/, @search)对数组@search的每个元素进行搜索匹配pattern,匹配元素返回到@found†map(expr, @list)对数组@list的每个元素进行expr运算,返回运算后的数组。元素用$_替代,如map($_+1, (1,2))Æ(2,3)二维数组@aoa=[[1,2,3],[‘a’,’b’,’c’]];„该数组的元素为两个数组„子数组访问:@{$aoa‐[0]}Æ(1,2,3)„子数组元素列表:@{$aoa‐[0]}[0,1,2]„子数组元素访问:$aoa‐[0][0]@a=(1,2,3);@b=(‘a’,‘b’,‘c’);$aoa=[[@a],[@b]];$aoa‐[0][0];关联数组:哈希/散列†关联数组的表示:%h=(1,’a’,2,’b’);†关联数组的下标为关键字key,由key得到的值为value†上式的意义是%h=(1=‘a’,2=’b’);†元素形式$h{1}=‘a’关联数组的赋值¾%a=(“key1”,1,”key2”,2);¾%h=@a;¾@a=%h;¾%h1=%h2;¾($a,%h)=@array;¾%h=(%first, %second);¾%h1=(%h2, ‘k’, ‘v’)¾函数的返回:%h=split();¾@keys=(‘a’,’b’,’c’); @hash{@keys}=@hash{reverse@keys};关联数组操作函数†keys(%hash), values(%hash)分别返回键和值的列表,返回元素无顺序†($key, $value)=each(%hash)效率高于先用foreach$k (keys %h), 再用$hash{$k}†exists $hash{‘key’}判断关键字是否存在†undef(%h)相当于删除散列%h=();†delete关联数组的顺序foreach$w(sortkeys(%hash)) # 按照字符串排序或者foreach$w(sort{$a=$b} keys(%hash)) #数值排序文件†存放于磁盘,用于读写访问,访问前必须先打开文件,结束时关闭文件open(HANDLE, “filename”) || die $!;†成功返回非零,失败返回零†HANDLE:文件句柄,用来代表操作的文件。以字母开头,字母、数字、下划线组成,一般用大写字母†缺省打开的句柄STDIN, STDOUT, STDERR, 文件描述符为0,1,2。不必调用open就可以直接访问„STDIN:键盘输入,控制台。„STDOUT:屏幕,显示屏。„STDERR:错误输出,显示屏。文件访问模式†只读:open(F, “filename”);或者open(F, “filename”); 文件不存在则打开失败†只写:open(F, “filename”); 文件不存在则创建新文件,存在则清空重写†追加:open(F, “

1 / 51
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功