前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Perl项目中的面向对象、继承默认加载和正则表达式的使用方法

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

作者头像
上进小菜猪
发布2023-01-01 10:18:14
1.7K0
发布2023-01-01 10:18:14
举报

Perl面向对象

类只是一个简单的包。 可以将包用作类,并将包中的函数用作类方法。 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]来修改它。(请参阅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";
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-12-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Perl面向对象
  • 继承
  • 默认加载
  • 正则表达式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档