Perl基础知识学海无边,书囊无底。Perl这个词的意思•1.实用摘录和报表语言(PracticalExtractionandReportLanguage)。•2.病态折中式垃圾列表器(PathologicallyEclecticRubbishLister)。以上都得到了Larry的认可。大写P表示的Perl指的是程序语言,小写p表示的perl指的是实际编译并运行程序的解释器。CPAN是什么?•CPAN是Perl综合典藏网,里面有Perl本身的源代码,各种非Unix系统的安装程序,范例程序,说明文档,扩展模块以及跟Perl相关的历史消息。•网址:或是•格式的文档。•上有最新版本问题集一个简单的程序Helloworld#!/usr/bin/perlprint“Hello,world!\n”;第二章标量数据•1.数字•2.字符串•3.布尔值标量数据—数字常量•数字常量1.浮点数常量1.25,-6.5e24,-1.2E-232.整数常量0,2011,-40,61_298_2011_10_133.非十进制整数常量0377,0xff,0b11111111标量数据—字符串常量•字符串常量1.单引号内的字符串常量单引号内的\n并不代表换行字符,而是表示反斜线和n这两个字符。只有在后面是另一个反斜线或单引号时,前面的反斜线才有特殊的意义。标量数据—字符串常量2.双引号内的字符串常量双引号内字符串的反斜线转义•\l将下个字符转为小写•\L将到\E为止的所有字符转为小写•\u将下个字符转为大写•\U将到\E为止的所有字符转为大写•\Q将到\E为止的非单词字符加上反斜线•\E结束\L,\U或\Q标量数据-字符串操作符1..用点号连接两个字符串2.x用x重复字符串,如5x3=“555”标量数据-变量•$美元符开始,后面接一个字母或下划线为首。如:$zqd_variablePerl内建警告信息•1.$perl–wmy_program•2.#!/usr/bin/perl–w•3.usewarnings;•4.usediagnostics;•5.$perl–Mdiagnostics./my_program字符串中的标量变量内插•$meal=“brontosaurussteak”•1.$barney=“fredatea$meal”;•2.$barney=‘fredatea’.$meal;•如果2写成•$barney=‘fredatea$meal’;•结果会如何呢??操作符•指数操作符**如2**4=2的4次方。•行输入操作符STDIN如$line=STDIN;•chomp操作符移除换行符•defined函数判断是否为undef第三章列表与数组•列表指的是标量的有序集合,而数组则是存储列表的变量。列表是数据,数组是变量。•数组用@开始,后面接一个字母或下划线为首。如@TD_team_names;•获取数组元素内容用$TD_team_names[0];特殊的数组索引值•1.$#TD_team_names最后一个元素的索引值•2.-1最后一个元素的索引值列表直接量•1.(1,2,3,);•2.(1..100);•3.(100..1);•4.qw(123);操作数组•pop和push操作符pop操作符用来取出数组中的最后一个元素,同时返回该元素值push操作符用来添加一个元素到数组的尾端•shift和unshift操作符操作数组的开头。操作数组•Perl的”老地方”:$_如foreach(1..10){Print“Icancountto$_!\n”;}•reverse操作符按相反的次序返回列表操作数组•Sort操作符按字符编码的顺序排序数组如sort@TD_team_names;#错误•强制指定标量上下文scalar如scalar@TD_team_names,TD组人数•列表上下文中的STDIN以control+D结束第四章子程序•定义子程序用sub以及经过缩进的代码块,组成子程序的主体如:submarine{$n+=1;#全局变量print“Hello,TDteamnumber$n!\n”;}•调用子程序&marine;#$n=1;&marine;#$n=2;第四章子程序•返回值子程序可以省略return,把最后一行做为返回值。•参数Perl会自动将参数列表化名为特殊数组变量@_,该变量在子程序执行期间有效。所以$_[0]表示第一个参数,以次类推。第四章子程序•子程序中的私有变量my如my($TD_team_number)=@_;#列表上下文my$TD_team_number=@_;#标量上下文•长度可变的参数列表if(@_!=2)判断参数个各是不是为2第四章子程序•持久性私有变量用state来声明变量,它告诉perl该变量是某个子程序的私有变量,并且子程序的多次调用间保留该变量的值;第五章输入与输出•STDIN•钻石操作符输入钻石操作符是”行输入”操作符的特例,不过它并不是从键盘取得输入,而是从用户指定的位置读取。•调用参数@ARGV调用参数组成的列表。第五章输入与输出•输出到标准输出print•使用printf格式化输出•打开文件句柄open•openCONFIG,“dino”;#可读写•openCONFIG,“dino”;#读•openBEDROCK,“fred”;#写•openLOG,“logfile”;#尾部增加第五章输入与输出•关闭文件句柄close•用die处理严重错误die函数会输出你指定的信息,并且让你的程序立刻终止,并返回不为零的退出码。•$!是可读的系统出错信息•使用warn输出警告信息功能和die差不多,不过它不会终止程序运行。第五章输入与输出•使用文件句柄如while(PASSWD)•改变默认的文件输出句柄select第六章哈希•哈希就是包含一个键,一个值的数据结构。它的键是任何的字符串。•访问哈希元素$hash{$some_key};•访问整个哈希%family_name;第六章哈希•胖箭头=键=值•哈希函数•keys和values•each函数,罗列哈希每个键/值对。•exists函数,检查某键是否存在。•delete函数,删除某键值对。第六章哈希•系统环境哈希%ENV•如$ENV{PATH};第七章漫游正则表达式王国•使用简易模式若模式匹配的对象是$_的内容。只要把模式写在一对正斜线(/)中就可以了。•元字符点号(.)是任何单字符的通配符第七章漫游正则表达式王国•简易的量词*:匹配前面内容零次或多次。+:匹配前内容一次以上。?:匹配零次或一次。模式分组用()来分组。\1、\2来匹配组号。如/(.)\1/用\g{-1}11来排除\111的二义性择一匹配(|)第七章漫游正则表达式王国•字符集[]字符集是指一串可能出现的字符集合,通过写在[]内来表示,它只匹配单个字符,但可以是字符集里列出的任何一个。[^]表示字符集内的字符除外•字符集简写\d:[0-9]\w:[A-Za-z0-9]\s:[\f\t\n\r]第七章漫游正则表达式王国•\h:[\t]#横向空白•\v:[\f\n\r]#纵向空白•反义简写•[^\d]==[\D]:非数字•[^\w]==[\W]:非词•[^\s]==[\S]:非空白符第八章以正则表达式进行匹配•以m//进行匹配可以选择使用任何成对的定界符,如m##•可选修饰符1.用/i进行大小写无关的匹配2.用/s来匹配(.)的任意字符,主要是\n3./x加入空白.注:原始的空白会被忽略,原始空白可以用\s匹配。第八章以正则表达式进行匹配•锚位^标示字符串的开头。$标示字符串的结尾。\b..\b单词锚位。匹配\w,也就是由字母,数字,下划线组成的单词。\B非单词边界锚位,它匹配所有\b不能匹配的位置第八章以正则表达式进行匹配•绑定操作符=~=~让perl拿右边的模式来匹配左边的字符串。•捕获变量$1,$2..捕获到的字符串变量•不捕获模式(?:)•?:里的模式不会捕获到$1..这些变量里第八章以正则表达式进行匹配•命名捕捉•(?LABELPATTERN):LABEL为捕捉的变量名,用$+{LABEL}来使用捕获到的内容•自动匹配变量•$&:实际匹配模式的部分。•$`:匹配起始位置之前的字符串。•$’:匹配结束位置之后的字符串。第八章以正则表达式进行匹配•通用量词{n,m}:指定重复次数的范围。第九章用正则表达式处理文本•s///替换如s/zqdong/zhangqd/#把zqdong换成zhangqd•用/g进行全局替换s///g进行全局替换•不同的定界符s###,s{}{},s[][],s第九章用正则表达式处理文本•split操作符•@fields=split/separator/,$string;•join函数•my$result=join$glue,@pieces;•非贪婪题词•+?,*?,{5,8}?,{8,}?第九章用正则表达式处理文本•跨行的模式匹配/m•匹配字符串的行,而不是头尾。•一次更新多个文件•$^I=“.bak”;第十章其他控制结构•unless控制结构•条件为假时执行•Until控制结构•条件为真时,退出循环•循环控制•Last==break能立即中止循环•Next==continue•Redo返回到本次循环的顶端第十章其他控制结构•带标签的块•Last+标签•定义否操作符//•my$last_name=$last_name{$someone}//‘(Nolastname)’;第十一章Perl模块•寻找模块•从CPAN下载,安装•安装模块•可以查阅README或是INSTALL两个文件•使用模块•在程序开头的地方,用use指令来声明•如:useFile::Basenameqw/basename/第十二章文件测试•文件测试操作符及其意义•-r文件或目录,对目前(有效)用户或组可读•-w文件或目录,对目前(有效)用户或组可写•-x文件或目录,对目前(有效)用户或组可执行•-o文件或目录,对目前(有效)用户有效•-R文件或目录,对实际的用户或组可读•-W文件或目录,对实际的用户或组可写•-X文件或目录,对实际的用户或组可执行•-O文件或目录,对实际的用户有效•-e文件或目录,是存在的第十二章文件测试•-z文件存在而且没有内容(对目录来说永远为假)•-s文件或目录存在而且有内容(返回大小)•-f是普通文件•-d是目录•-l是符号链接•-S是socket类型的文件•-p是命名管道,也就是先入先出队列•-b是块设备文件(比如某个可挂载的磁盘)第十二章文件测试•-c是字符设备文件(比如某个I/O设备)•-u文件或目录设置了setuid位•-g文件或目录设置了setgid位•-k文件或目录设置了sticky位•-t文件句柄是TTY设备•-T看起来是像是文本文件•-B看起来像是二进制文件•-M最后一次修改后至今的天数•-A最后一次访问至今的天数•-C最后一次文件节点编号(inode)变更后至今的天数第十二章文件测试•虚拟文件句柄_•用上次查询过的文件信息来做当前的测试•stat和lstat函数•stat获取上表中的其他信息如my($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks)=stat($filename);•lstat获取符号链接本身的信息第十三章目录操作•改变当前工作目录chdir•目录句柄•目录句柄跟文件句柄用法差不多•opendir•readdir#读取文件名•closedir第十三章目录操作•删除文件unlink•unlink“file1”,“file2”…;•重命名文件rename•rename“old”,“new”;•