概述
一、Perl是什么? Perl是Practical Extraction and Report Language的缩写,它是由Larry Wall设计的,并由他不断更新和维护,用于在UNIX环境下编程。 .Perl具有高级语言(如C)的强大能力和灵活性。事实上,你将看到,它的许多特性是从C语言中借用来的。 .与脚本语言一样,Perl不需要编译器和链接器来运行代码,你要做的只是写出程序并告诉Perl来运行而已。这意味着Perl对于小的编程问题的快速解决方案和为大型事件创建原型来测试潜在的解决方案是十分理想的。 .Perl提供脚本语言(如sed和awk)的所有功能,还具有它们所不具备的很多功能。Perl还支持sed到Perl及awk到Perl的翻译器。 简而言之,Perl象C一样强大,象awk、sed等脚本描述语言一样方便。 二、Perl在哪里? 可到http://www.qqwm.com/edu/perl/www.perl.com下载。
三、运行 用文本编辑器编辑好你的Perl程序,加上可执行属性:$chmod +x <program>就可以执行了:$./<program>。如果系统提示:"/usr/local/bin/perl not found",则说明你没有安装成功,请重新安装。 注:你的程序的第一行必须为#!/usr/local/bin/perl(perl所在位置)。 四、注释: 注释的方法为在语句的开头用字符#,如: # this line is a comment 注:建议经常使用注释使你的程序易读,这是好的编程习惯。
Perl程序一般框架
#!/usr/bin/perl
use strict;
use …;
my $a;
my @b;
my %c;
sub my_sub1{
…
return ..;
}
#remark sth
sub my_sub2{
…
}
other statements;
框架部分说明
#!/usr/bin/perl
这里指出解释器perl的路径,这种写法只用于unix下,在windows下当注释处理
use strict;
use …;
这部分相当于java里面的import,C里面的 #include,引用一些程序需要
用到的包文件。use strict 这句比较特殊,引用这句只是告诉perl对程序作
严格的语法检查,建议脚本里面都带上这句。
my $va;
my @vb;
my %c;
这是变量定义部分,my 是关键字,相对于vb里面的dim,不过如果没有
use strict;语句,则定义变量不用加上my关键字。引用变量的时候需要
注意,perl和c一样是大小写敏感的。
框架部分说明
#remark sth
perl里用 # 号注释一行
块注释
perl里面注视一段代码
=remarkbegin 这里=号顶格写,后面紧跟以字母开头的字符串
statement 1;
statement 2;
…
=cut 这表示注视结束
statement n;
框架部分说明
sub my_sub1{
} 这是perl的子程序定义
Perl不分函数和过程,如果sub程序体里有显式的return语句,则由
该语句决定返回值,如果没有显式的return语句,则返回值为执行的
sub程序体里的最后一个语句的值。
sub定义时不需要指定参数及类型,如果调用的时候传递了参数
则所有的参数存放在数组 @_ 里面, $_[0],$_[1]…分别对应第一、
第二个参数。
sub调用方式: &sub_name; do sub_name; sub_name
程序执行流程
perl跟java、c 不一样,没有main函数,perl脚本在解释执行时和
shell脚本一样,自顶向下,跳过sub定义部分依次执行
数据类型
标量 定义时用$标示
数组 定义时用@标示
Hash表 定义时用%标示
my $username = “oracle”;
my @tables = (“custome”,”order”);
my %week = ((1=>'monday'),(2=>'tuesday'));
任意一个标量变量可以赋值 整形、浮点型,字符串
数组变量的元素可以是不同的标量,也可以是数组、hash表
字符串特别说明
Perl中定义字符串可以用单引号,也可用双引号
my $username = ‘oracle’;
my $passwd = “manager”;
二者的区别在于,双引号表达式中perl会对其中的变量先做解析替换
my $passwd = “$username” 这样,$passwd 实际上和
变量 $username 相等,如果口令就是$加字符username则可以用
my $passwd = ‘$username’
或者用双引号表达式,但需要对$符号做转义处理
my $passwd = “/$username”;
注意:在双引号表达式中如果引用关键字譬如$,@,%,/本身,则需要对其作转义处理,而在单引号表达式中不需要。转义方法就是在其前加上反斜杠 “/”
操作符
一、算术操作符 二、整数比较操作符 三、字符串比较操作符 四、逻辑操作符 五、位操作符 六、赋值操作符 七、自增自减操作符 八、字符串联结和重复操作符 九、逗号操作符 十、条件操作符
操作符特别说明
Perl操作符和c基本一样,需要特别说明的是
字符串比较操作符
lt, gt, eq, le, ge, ne 这点和shell脚本里的比较是一样的,在比较字符串的时候一定要用这些比较符,而不要用数值比较操作符<,==,>,>=,!= ,否则会出现意想不到的结果。
字符串连结和重复操作符
连接用 . : $a = “hello” . “,world” . $c;
重复用 x : $a = “a” x 3; #$a = “aaa”;
控制结构
一、条件判断 二、循环: 1、while循环 2、until循环 3、for循环 4、针对列表(数组)每个元素的foreach循环 5、do循环 6、循环控制 7、传统的goto语句 三、单行条件
foreach循环、循环控制、单行条件
foreach my $v (“1”,”abc”,10){
print “$v/n”;
}
foreach (“1”,”abc”,10){
print ;
print “/n”; #这两句等价于 print “$_/n”;
}
循环控制
Perl中跳出循环用last ,跳过循环体下面的语句用next
分别相当于c里面的break 和 continue
for(;;){
last if(….);
….;
next if(…);
}
单行条件
这是perl比较特殊也是比较方便的语法
语法为statement keyword condexpr。其中keyword可为if、unless
、while或until,如: print ("This is zero./n") if ($var == 0); print ("This is zero./n") unless ($var != 0); print ("Not zero yet./n") while ($var-- > 0); print ("Not zero yet./n") until ($var-- == 0)
虽然条件判断写在后面,但却是先执行的。
模式匹配
模式匹配是perl的优势,利用模式匹配perl能很方便的处理一些字串、文件
模式匹配在unix下shell脚本中用的也很普遍,它们的规则是通用的
匹配操作符
=~ 和 !~
=~检验匹配是否成功 !~ 则相反
$str = “abcdefg”;
print “字符串包含abc” if($str =~ /abc/);
print “字符串不包含abc” if($str !~ /abc/); if($str !~ /abc/);
模式匹配中特殊字符
. 匹配任何字符 () 模式内存(/($1)($2)($3)/)
^ 匹配开头 +(1次以上) *(任意次) ?(0or1){} 出现次数
$ 匹配结尾 ^ $ /b /B 锚
| (表示或) 选项 [hijk] [^放在开头表示取反] 范围
模式匹配
指定模式定界符//
默认情况下,模式匹配用/ / 表示,也可以由 m 自行指定 如:
$var =~ /abc/ $var =~ m!abc!
$var =~ ///abc/// $var =~ m!/abc/!
正则表达式例子
my $patFlt = '^[ ]*[-+]?[ ]*([1-9]/d*|0)/.?/d*[ ]*$';
my $patInt = '^[ ]*[-+]?[ ]*([1-9]/d*|0)[ ]*$';
$patFlt 用来检验一个变量值是不是浮点型
$patInt 用来检验一个变量是不是整形值
my $in;
while ($in = <>) {
if ($in !~ /$patInt/) {
print "/n error,please input a int value/n";
}
else{
print "/n your input values is : $in";
last;
}
}
其它内容
关联数组/哈希表
格式化输出
文件系统
Perl5中的引用/指针
Perl的面向对象编程
Perl5的包和模块
Perl函数集
Perl脚本实例
功能:查看FTP服务器指定目录下的文件信息