赞
踩
写在前面:
最近实习需要学习perl的基础知识,由于目前只需要了解perl基本语法,看懂即可,不做深入学习,因此写下本文,用于Perl快速入门。
内容主要来源:CSDN@David_Berkdong 《Perl与Python之间的一些异同》
Perl 支持的基本数据类型包括:标量、数组、哈希。分别用 $、@、% 定义。
# 与 hash 相关的函数有:
# keys:返回 hash 的键列表 my @keylist = keys %hash
# value:返回值列表 my @valuelist = values %hash
# each:用两个元素的列表返回键值对。
while(($key,$value)= each %hash)
{
print “$key =>$value\n”;
}
Perl除了支持传统的 if 、while 、for 控制结构,还支持 until 、unless 、foreach 等。
Perl 中没有 boolean 类型,零和空表示 False,其余表示 True。
## if if(expression){ true_statement; } ## if-else if(expression){ true_statement; } else{ false_statement; } ## if-elseif-else if(expression_A){ A_true_statement; } elseif(expression_B){ B_true_statement; } else{ false_statement; }
unless 和 if 不同之处在于当条件表达式的值为假的时候才执行,同时 unless 后面还能跟 else 语句。如:
unless($mon =~ /^Feb/{ # mon中不以Feb开头则进入条件
print "This month has at least thirty days.\n";
}
else{
print "Do you see what's going on here? \n";
}
Perl 中的 for 循环除了支持传统的 for 循环,即 for ( 表达式 1; 表达式 2; 表达式 3) ,还支持 foreach 语句,基本语法为:
foreach $i (@aList){
statement1;
}
Perl 循环控制结果还支持 while 和 do-while 以及 until 形式,until 与 while 结构相似,区别在于 unitl 会在条件为假的时候重复执行。until 语法如下:
until(expression){
statement;
}
Perl 有三个循环控制操作符,分别为 Last 、next 、redo。
Perl函数基本语法:
sub functionName{
statement;
[return value]
}
返回值:使用return语句显示返回,如果没有return,默认返回最后一次运算的结果
调用:& 函数名(参数 1,参数 2,…),如果声明在前,可以省略 &。如果用户所定义的子过程与内置函数重名,则不能省略 &。
如下例必须使用 &chomp 调用:
sub chomp{
print “it is my chomp\n”;
}
函数参数:
Perl 程序把变量和子程序的名称存贮到符号表中,Perl 的符号表中名字的集合就称为 Perl 包 (package)。定义语法为:package mypack;每个符号表有其自己的一组变量、子程序名,各组名字是不相关的,因此可以在不同的 Perl 包中使用相同的变量名,而代表的是不同的变量。Perl 模块有两种来源,一种是随 Perl 发行版本一同打包的,另外就是用 CPAN 中下载的。Perl 模块和包的概念并不清晰,两者有时可以混用。在程序中使用模块的操作称为导入模块;导入模块关键字 use;如:use ModuleName;模块被导入后,其中的子程序和变量就可以直接使用了;要取消一个已经导入了的模块,可以使用关键字 no;如:no ModuleName。
在 Perl 中,类是 Perl 包,含有提供对象方法的类,而方法是 Perl 的子程序,类名是其第一个参数,对象是对类中数据项的引用。在 Perl 中创建一个新类,首先要创建一个包,扩展名为 .pm, 在创建 perl 包的时候程序的最后一个必须为"1;";否则该包不会被 Perl 处理。
## 创建perl的类和对象
package person;
use strict;
sub new {
my $class = shift();
print("CLASS = $class\n");
my $self = {};
$self -> {"name"} = shift();
$self -> {"sex"} = shift();
bless $self, $class;
return $self;
}
其中 new() 方法是对象的构造函数,是创建该类的对象实例必须被调用的,它返回该对象的引用。将类名与引用相结合称为”bless”一个对象,其语法为:bless YeReference [,classname]
YeReference 是对被”祝福”的对象的引用,classname 是可选项,指定对象获取方法的包名,其缺省值为当前包名。也可以通过函数 bless 来声明一个构造函数
sub new{
my $class = shift;
my $self = {};
bless $self, $class;
return $self;
}
创建一个对象可以直接使用 new 关键字。$object = new Person( “mohand”, “sam”, 345);
Perl 类中的方法就 Perl 的子函数,规定第一个参数为对象或者被引用的包,分为静态方法和虚方法。 虚方法通常首先把第一个参数 shift 到变量 self 或 this 中,然后将该值作普通的引用使用。一是通过该对象的引用 ( 虚方法 ),一是直接使用类名 ( 静态方法 )。如上例中如果类 Person 中有 getContactList 则可以直接使用 $object->getContactList() 来调用该方法。
Perl 支持重载,当两个不同的类中含有相同的方法名称的时候,可以用 :: 操作符指定使用哪个类中的方法。
m
e
s
s
=
Q
a
v
a
:
:
g
r
i
n
d
(
"
w
h
o
l
e
"
,
"
l
o
t
t
a
"
,
"
b
a
g
s
"
)
;
Q
a
v
a
:
:
g
r
i
n
d
(
mess = Qava::grind("whole","lotta","bags"); Qava::grind(
mess=Qava::grind("whole","lotta","bags");Qava::grind(mess, “whole”,“lotta”,“bags”);
由于 Perl 采用了简单的、基于引用的垃圾回收系统。Perl 跟踪对象的链接数目,当某对象的最后一个应用释放到内存池时,该对象就自动销毁。因此一般不需要定义类的析构函数。
Perl 通过数组 @ISA 支持继承。
package Employee;
use Person;
use strict;
our @ISA = qw(person); # inherits from Person
当子类继承父类的时候,继承了父类的所有方法,但子类也可以覆盖父类的方法。如加入 Employee 想覆盖父类的 getFirstName:
package Employee;
use Person;
use strict;
our @ISA = qw(person); # inherits from Person
# Override helper function
sub getFirstName {
my($self) = @_;
# This is child class function.
print "This is child class function.\n";
return $self -> {_firstName};
}
调用直接使用 $firstName = $object->getFirstName(); 如果要调用父类的 getFirstName,则可以使用 $object->Person::getFirstName();
在 Python 中创建一个类的基本语法为 :
class className(bases):
classBody;
参数 base 可以是一个单继承或者多继承的父类,object 是所有类的父类,位于类继承结构的最上层。类的构造函数为 init(),其中构造函数中 self 会作为第一个默认的参数。而类的析构函数则是 del(),访问类的方法和属性可以直接使用 . 访问符。
正则表达式是perl比较突出的一大特色,perl 中正则表达式有三种形式:
更具体的内容可以见这篇文章,本文不作展开。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。