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

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

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)但是对象本身(例如“${$_[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";
相关文章
|
4月前
|
Java 测试技术 API
JavaSE 面向对象程序设计 正则表达式
JavaSE 面向对象程序设计 正则表达式
37 0
|
5月前
|
Perl
Perl 教程 之 Perl 正则表达式 7
Perl教程讲解了其强大的正则表达式功能,用于字符串匹配、查找、替换和提取。示例展示如何使用`/s`删除变量`$string`中的重复字符,输出结果为原字符串。其他实例包括将非数字字符替换为空格,删除tab和空格,以及将数字间字符替换为单个空格。
40 3
|
5月前
|
Perl
Perl 教程 之 Perl 正则表达式 6
**Perl正则表达式强大多能,常用于字符串匹配、替换和提取。转化操作符如`tr`用于字符转换,如将所有小写字母转大写:`$string =~ tr/a-z/A-Z/`。**
43 2
|
5月前
|
Perl
Perl 教程 之 Perl 正则表达式 4
简洁概括:Perl正则表达式强大,s///操作符用于字符串替换,例子展示替换"google"为"baidu"。
33 1
|
5月前
|
Perl
Perl 教程 之 Perl 正则表达式 1
Perl教程介绍了其强大的正则表达式功能,用于字符串匹配、替换和转化。匹配用m//(可简写为//),替换用s///,转化用tr///,常与=~或!~配合判断匹配与否。示例展示了m//在匹配字符串中的应用。
29 0
|
JavaScript 前端开发
js正则表达式的作用及使用方法
js正则表达式的作用及使用方法
100 1
|
5月前
|
Windows Perl
Perl 教程 之 Perl 正则表达式 8
Perl的正则表达式是其强项,常用于字符串匹配、查找、替换等。基本操作包括:`.`匹配任意字符(除换行符),`x?`匹配0或1次`x`,`x*`匹配0或多次`x`,`x+`匹配1或多次`x`。还有范围匹配如`[0-9]`、否定匹配`[^a-z]`、边界匹配`\b`等。特殊序列如`\d`代表数字,`\s`代表空格,`()`用于记忆匹配内容,`/pattern/i`忽略大小写。
75 0
|
Shell PHP Perl
实训项目:PHP正则表达式的应用
正则表达式是一种描述字符串结构的语法规则,是一种特定的格式化模式,用于验证各种字符串是否匹配(Match)这个特征,进而实现高级的文本查找、替换、截取等操作。 正则表达式在发展过程中出现了多种形式,一种是POSIX规范兼容的表达式,另一种是当Perl(一种功能丰富的编程语言)发展起来后,衍生出来的PCRE(Perl兼容正则表达式)库,使得许多开发人员将PCRE整合到自己的语言中,PHP中也未PCRE库的使用提供了相应的函数。
206 0
实训项目:PHP正则表达式的应用
|
自然语言处理 关系型数据库 MySQL
正则表达式使用方法 | 学习笔记
快速学习正则表达式使用方法
175 0
|
自然语言处理 IDE 关系型数据库
正则表达式使用方法 | 学习笔记
快速学习正则表达式使用方法
101 0
下一篇
无影云桌面