类只是一个简单的包。
可以将包用作类,并将包中的函数用作类方法。
Perl包提供独立的名称空间,因此不同包的方法和变量名不会冲突。
Perl类的文件后缀是.pm。
接下来,我们创建一个Person类:
包装人员;
类的代码范围为脚本文件的最后一行或下一个package关键字。
package Person;
sub new
{
my $class = shift;
my $self = {
_firstName => shift,
_lastName => shift,
_ssn => shift,
};
# 输出用户信息
print "名字:$self->{_firstName}\n";
print "姓氏:$self->{_lastName}\n";
print "编号:$self->{_ssn}\n";
bless $self, $class;
return $self;
}
Perl中有两种不同的面向对象编程实现:
第一种基于匿名哈希表。每个对象实例的本质是对匿名哈希表的引用。在这个匿名哈希表中,存储了所有实例属性。
其次,基于array方法,在定义类时,我们将为每个实例属性创建一个数组,每个对象实例的本质是对这些数组中的行的索引的引用。在这些数组中,存储了所有实例属性。
面向对象的基本概念
面向对象有许多基本概念。这里我们收到三个:对象、类和方法。
对象:对象是对类中数据项的引用
Class:Class是一个Perl包,其中包含提供对象方法的类。
方法:该方法是一个Perl子程序,类名是它的第一个参数。
Perl提供了祝福()函数。祝福用于构造对象。通过祝福将引用与类名关联,可以返回引用以构造对象。
类别的定义
sub getFirstName {
return $self->{_firstName};
}
创建和使用对象
要创建类的实例(对象),我们需要定义构造函数。大多数程序使用类名作为构造函数。Perl中可以使用任何名称。
可以使用各种Perl变量作为Perl对象。在大多数情况下,我们将使用引用数组或散列。
接下来,我们使用Perl哈希引用为Person类创建一个构造函数。
创建对象时,需要提供构造函数,这是一个返回对象引用的子例程。
示例如下:
sub setFirstName {
my ( $self, $firstName ) = @_;
$self->{_firstName} = $firstName if defined($firstName);
return $self->{_firstName};
}
Perl中的类方法通过@ISA数组继承,该数组包含其他包(类)的名称。必须显式设置变量的继承。
多重继承意味着@ISA数组包含多个类(包)名称。
只能通过@ISA继承方法,但不能继承数据。
接下来,我们创建一个Employee类来继承Person类。
#!/usr/bin/perl
package Employee;
use Person;
use strict;
our @ISA = qw(Person); # 从 Person 继承
如果在当前类、当前类的所有基类和UNIVERSAL类中找不到请求的方法,将再次找到名为AUTOLOAD()的方法。如果找到AUTOLOAD,将调用它,并将全局变量$AUTOLOAD的值设置为缺少方法的完全限定名。
如果没有,Perl将声明失败和错误。
package MyClass;
...
sub DESTROY
{
print "MyClass::DESTROY called\n";
}
Perl将对象引用作为唯一参数传递给DESTROY。请注意,此引用是只读的,也就是说,不能访问 [ 0 ] 来修改它。(请参阅 p e r l s u b )但是对象本身(例如“ _[0]来修改它。(请参阅perlsub)但是对象本身(例如“ [0]来修改它。(请参阅perlsub)但是对象本身(例如“{KaTeX parse error: Expected '}', got 'EOF' at end of input: _[0]”或“@{[0]}”和“%{$[0]}”)仍然是可写的。
如果在析构函数返回之前重新祝福对象引用,Perl将在析构器返回之后调用重新祝福对象的DESTROY方法。这使有机会调用基类或指定的其他类的析构函数。应该注意,DESTROY也可以手动调用,但通常没有必要这样做。
释放当前对象后,将自动释放当前对象中包含的其他对象。
#!/usr/bin/perl
$bar = "I am runoob site. welcome to runoob site.";
if ($bar =~ /run/){
print "第一次匹配\n";
}else{
print "第一次不匹配\n";
}
$bar = "run";
if ($bar =~ /run/){
print "第二次匹配\n";
}else{
print "第二次不匹配\n";
}
正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
Perl语言的正则表达式功能非常强大,基本上是常用语言中最强大的,很多语言设计正则式支持的时候都参考Perl的正则表达式。
#!/usr/bin/perl
$string = "welcome to google site.";
$string =~ s/google/runoob/;
print "$string\n";
Perl的正则表达式的三种形式,分别是匹配,替换和转化:
替换运算符s///是匹配运算符的扩展。它将用新字符串替换指定的字符串。基本格式如下:
s/图案/替换/;
PATTERN是匹配的模式,REPLACE是替换字符串。
例如,我们将以下字符串中的“google”替换为“runoob”:
#!/usr/bin/perl
$string = 'runoob';
$string =~ tr/a-z/a-z/s;
print "$string\n";