Perl项目中的面向对象、继承默认加载和正则表达式的使用方法

2023-01-01 10:18:14 浏览数 (2)

Perl面向对象

类只是一个简单的包。 可以将包用作类,并将包中的函数用作类方法。 Perl包提供独立的名称空间,因此不同包的方法和变量名不会冲突。 Perl类的文件后缀是.pm。 接下来,我们创建一个Person类: 包装人员; 类的代码范围为脚本文件的最后一行或下一个package关键字。

代码语言:javascript复制
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提供了祝福()函数。祝福用于构造对象。通过祝福将引用与类名关联,可以返回引用以构造对象。 类别的定义

代码语言:javascript复制
sub getFirstName {
    return $self->{_firstName};
}

创建和使用对象 要创建类的实例(对象),我们需要定义构造函数。大多数程序使用类名作为构造函数。Perl中可以使用任何名称。 可以使用各种Perl变量作为Perl对象。在大多数情况下,我们将使用引用数组或散列。 接下来,我们使用Perl哈希引用为Person类创建一个构造函数。 创建对象时,需要提供构造函数,这是一个返回对象引用的子例程。 示例如下:

代码语言:javascript复制
sub setFirstName {
    my ( $self, $firstName ) = @_;
    $self->{_firstName} = $firstName if defined($firstName);
    return $self->{_firstName};
}

继承

Perl中的类方法通过@ISA数组继承,该数组包含其他包(类)的名称。必须显式设置变量的继承。 多重继承意味着@ISA数组包含多个类(包)名称。 只能通过@ISA继承方法,但不能继承数据。 接下来,我们创建一个Employee类来继承Person类。

代码语言:javascript复制
#!/usr/bin/perl
 
package Employee;
use Person;
use strict;
our @ISA = qw(Person);    # 从 Person 继承

默认加载

如果在当前类、当前类的所有基类和UNIVERSAL类中找不到请求的方法,将再次找到名为AUTOLOAD()的方法。如果找到AUTOLOAD,将调用它,并将全局变量$AUTOLOAD的值设置为缺少方法的完全限定名。 如果没有,Perl将声明失败和错误。

代码语言:javascript复制
package MyClass;
...
sub DESTROY
{
    print "MyClass::DESTROY calledn";
}

Perl将对象引用作为唯一参数传递给DESTROY。请注意,此引用是只读的,也就是说,不能访问

_[0]来修改它。(请参阅perlsub)但是对象本身(例如“

{KaTeX parse error: Expected '}', got 'EOF' at end of input: _[0]”或“@{[0]}”和“%{$[0]}”)仍然是可写的。 如果在析构函数返回之前重新祝福对象引用,Perl将在析构器返回之后调用重新祝福对象的DESTROY方法。这使有机会调用基类或指定的其他类的析构函数。应该注意,DESTROY也可以手动调用,但通常没有必要这样做。 释放当前对象后,将自动释放当前对象中包含的其他对象。

正则表达式

代码语言:javascript复制
#!/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的正则表达式。

代码语言:javascript复制
#!/usr/bin/perl
 
$string = "welcome to google site.";
$string =~ s/google/runoob/;
 
print "$stringn";

Perl的正则表达式的三种形式,分别是匹配,替换和转化: 替换运算符s///是匹配运算符的扩展。它将用新字符串替换指定的字符串。基本格式如下: s/图案/替换/; PATTERN是匹配的模式,REPLACE是替换字符串。 例如,我们将以下字符串中的“google”替换为“runoob”:

代码语言:javascript复制
#!/usr/bin/perl
 
$string = 'runoob';
$string =~ tr/a-z/a-z/s;
 
print "$stringn";

1 人点赞