perl 简明教程 perl教程集合
参考:http://shouce.jb51.net/perl5/
网站环境配置:https://www.nhooo.com/article/74005.htm
Perl的基本语法https://www.nhooo.com/shouce/Perl.htm
前言:perl是什么,干什么用的?perl原来设计者的意图是用来处理字符的,80%的强项是处理字符,当然其它的很多都可以。现在很多网页也是用perl的,通常需要CGI环境,比如$char=~/语言/,意思是查找含有“语言”这两个字的字符串。它还能做unix和linux系统管理,文件内容处理(基于awk和sed等工具的功能),其他好多你想做的事。
一、perl环境配置
1.获取perl
Perl通常位于/usr/local/bin/perl或/usr/bin/perl中。你可以在Internet用匿名FTP免费得到它,如ftp://prep.ai.mit.edu/pub/gnu/perl-5.004.tar.gz
2.安装过程为:
(1)解压:
$gunzipperl-5.004.tar.gz
$tarxvf-<perl-5.004.tar.gz
(2)编译:
$makemakefile
(3)放置:
将编译生成的可执行文件拷贝到可执行文件通常所在目录,如:
$copy<compiledexcutablefile>/usr/local/bin/perl
3.运行
用文本编辑器编辑好你的Perl程序,加上可执行属性:$chmod+x<program>就可以执行了:$./<program>。如果系统提示:"/usr/local/bin/perlnotfound",则说明你没有安装成功,请重新安装。
注:你的程序的第一行必须为#!/usr/local/bin/perl(perl所在位置)。
4注释:
注释的方法为在语句的开头用字符#,如:
#thislineisacomment
注:建议经常使用注释使你的程序易读,这是好的编程习惯。
二、常量、变量等问题
1.单引号与双引号
双引号内的字符串中支持简单变量替换 如:$text="Thistextcontainsthenumber$number.";
双引号内的字符串中支持转义字符
单引号字符串与双引号字符串有两个区别,一是没有变量替换功能,二是反斜线不支持转义字符。
2.重复和联结
重复:print"t"x5 (会输出5个t,注意:其中x为英文字母小写x)
联结:$a.="bc" (相当于连等于)
3.简单变量、数组、列表
简单变量:用$声明,如:$a="hello";
数组:用@声明,如:@arr=('a','b','c');
列表:列表是包含在括号里的一序列的值,可以为任何数值,也可为空,如:(1,5.3,"hello",2),空列表:()
三、文件操作
1.打开文件:如open(MYFILE,"file1")||die("Couldnotopenfile");MYFILE为声明的文件句柄,file1为文件名/文件路径,整行代码意为:如果打开失败,则输出"Couldnotopenfile";
关闭文件:当文件操作完毕后,用close(MYFILE);关闭文件。
2.读文件
语句$line=<MYFILE>;从文件中读取一行数据存储到简单变量$line中并把文件指针向后移动一行。<STDIN>为标准输入文件,通常为键盘输入,不需要打开。
语句@array=<MYFILE>;把文件的全部内容读入数组@array,文件的每一行(含回车符)为@array的一个元素。
#!/usr/bin/perl open(MYFILE,'1.txt'); @arr=<MYFILE>; print@arr;
3.写文件
形式为:
open(OUTFILE,">outfile");
printOUTFILE("Hereisanoutputline.\n");
注:STDOUT、STDERR为标准输出和标准错误文件,通常为屏幕,且不需要打开。
4.判断文件状态
1、文件测试操作符
语法为:-opexpr,如:
if(-e"/path/file1"){
printSTDERR("Filefile1exists.\n");
}
文件测试操作符
例:
unless(open(INFILE,"infile")){
die("Inputfileinfilecannotbeopened.\n");
}
if(-e"outfile"){
die("Outputfileoutfilealreadyexists.\n");
}
unless(open(OUTFILE,">outfile")){
die("Outputfileoutfilecannotbeopened.\n");
}
等价于
open(INFILE,"infile")&&!(-e"outfile")&&
open(OUTFILE,">outfile")||die("Cannotopenfiles\n");
四、模式匹配:
1.概念:模式指在字符串中寻找的特定序列的字符,由反斜线包含:/def/即模式def。其用法如结合函数split将字符串用某模式分成多个单词:@array=split(//,$line);
2.匹配操作符=~、!~
=~检验匹配是否成功:$result=$var=~/abc/;若在该字符串中找到了该模式,则返回非零值,即true,不匹配则返回0,即false。!~则相反。
五、控制结构
(1)、条件判断:if()elseif()else();
(2)、循环:
1、while循环
2、until循环
3、for循环
4、针对列表(数组)每个元素的foreach循环
open(MYFILE,'1.txt'); @arr=<MYFILE>; foreach$str(@arr){ print$str; }
5、do循环
6、循环控制:退出循环为last,与C中的break作用相同;执行下一个循环为next,与C中的continue作用相同;PERL特有的一个命令是redo,其含义是重复此次循环,即循环变量不变,回到循环起始点,但要注意,redo命令在do循环中不起作用。
7、传统的goto语句:gotolabel;
(3)、单行条件
语法为statementkeywordcondexpr。其中keyword可为if、unless、while或until,如:
print("Thisiszero.\n")if($var==0);
print("Thisiszero.\n")unless($var!=0);
print("Notzeroyet.\n")while($var-->0);
print("Notzeroyet.\n")until($var--==0);
虽然条件判断写在后面,但却是先执行的。
六、子程序
(1)、定义
子程序即执行一个特殊任务的一段分离的代码,它可以使减少重复代码且使程序易读。PERL中,子程序可以出现在程序的任何地方。定义方法为:
subsubroutine{
statements;
}
(2)、调用
调用方法如下:用&调用
&subname;
...
subsubname{
...
}
七、文件系统:与unix紧密相关,参考:http://shouce.jb51.net/perl5/perl11.htm
OTHER:
管道:可以将前一执行的结果作为后面的参数,比如
env|grepEDITOR
就可以删选出环境变量中EDITOR的值