Perl OOP

1. 模块/类(包)

创建一个名为Apple.pm的包文件(扩展名pm是包的缺省扩展名,意为Perl Module)。
一个模块就是一个类(包)。

2. new方法

new()方法是创建对象时必须被调用的,它是对象的构造函数。

sub new
{
    my $class = shift;
    my $this = {};
    bless $this, $class;
    return $this;
}

this={}创建一个没有键/值对的哈希引用,返回值被赋给局域变量this。
bless()函数将类名与引用相关联。从new()函数返回后,$this引用被销毁。

3. bless方法

构造函数是类的子程序,它返回与类名相关的一个引用。
bless()函数将类名与引用相关联。
其语法为:bless reference [,class]
reference: 对象的引用
class: 是可选项,指定对象获取方法的包名,缺省值为当前包名。

4. 类方法

有两种方法:静态方法(如:构造函数)和虚方法。
静态方法第一个参数为类名,虚方法第一个参数为对象的引用。
虚方法通常首先把第一个参数shift到变量self或this中,然后将该值作普通的引用使用。
静态方法直接使用类名来调用,虚方法通过该对象的引用来调用。

5. 继承

@ISA数组含有类(包)名,@INC数组含有文件路径。
当一个方法在当前包中未找到时,就到@ISA中去寻找。
@ISA中还含有当前类继承的基类。

类中调用的所有方法必须属于同一个类或@ISA数组定义的基类。
@ISA中的每个元素都是一个其它类(包)的名字。
当类找不到方法时,它会从 @ISA 数组中依次寻找(深度优先)。
类通过访问@ISA来知道哪些类是它的基类。
e.g.

use Fruit;
our @ISA = qw(Fruit);

6. OOP Sample

Super Class: Fruit.pm

#!/usr/bin/perl -w

use strict;
use English;
use warnings;

package Fruit;

sub prompt
{
    print "\nFruit is good for health\n";
}

1;

Sub Class: Apple.pm
Note: Sub class Apple.pm extends super class Fruit.pm via putting Fruit into array @ISA in Apple.pm

#!/usr/bin/perl -w

use strict;
use English;
use warnings;

package Apple;

use Fruit;
our @ISA = qw(Fruit);

sub new
{
    my $class = shift;
    my %parm = @_;

    my $this = {};

    $this -> {'name'} = $parm{'name'};
    $this -> {'weight'} = $parm{'weight'};

    bless $this, $class;

    $this -> init();

    return $this;
}

sub init
{
    my $reference = shift;
    my $class = ref $reference;

    print "class: $class\n";

    while (my ($key, $value) = each (%$reference))
    {
        print "$key = $value\n";
    }
}

sub order
{
    my $class = ref shift;
    my $customer = shift;
    my $address = shift;
    my $count = shift;

    print "\n$customer order $count $class to $address\n";
}

1;

Main Class: Purchase.pl

#!/usr/bin/perl -w

use strict;
use English;
use warnings;

use Apple;

my $apple = new Apple('name' => 'Red Fuji', 'weight' => 300);

$apple -> prompt();

$apple -> order('Zhou Shengshuai', 'ChengDu', 99);

Output:

class: Apple
weight = 300
name = Red Fuji

Fruit is good for health

Zhou Shengshuai order 99 Apple to ChengDu
时间: 2025-01-24 03:55:13

Perl OOP的相关文章

OOA/OOD/OOP(转)

OOA Object-Oriented Analysis:面向对象分析方法 是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题.OOA与结构化分析有较大的区别.OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析. OOA(面向对象的分析)模型由5个层次(主题层.对象类层.结构层.属性层和服务层)和5个活动(标识对象类.标识结构.定义主题.定义属性和定义服务)组成.在这种方法中定义了两种对象类之间的结构,

Perl 与 Python 之间的一些异同整理_其它

关于 Perl 与 Python 的起源和特点 Perl 是 Practical Extraction and Report Language 的简称,由 1987 年 Larry Wall 创建,最初的目的是为了在 UNIX 上方便处理报表,经过长期的发展已经成为一种全功能的程序设计语言,当前最新的版本为 Perl5.14.1,Perl 作为一种自由而强大的编程语言,其中心思想是: There's More Than One Way To Do It.(不只一种方法來做这件事 ),即「 Tim

Perl5 OOP学习笔记第1/2页_perl

在学习了Perl的基本语法之后,学习Perl的OOP,略有心得.不知道Perl各个版本之间OOP是否有区别,但是我是学习的Perl5,所以在标题上将版本号也写出来了.因为了解到PHP4和PHP5的OOP部分就有不小的差别,所以有此担心. 学习Perl的OOP,最关键的两件事情就是package和bless.只要把这两个东西搞清楚也就学会大一半了. Perl的package 感觉Perl的package和Java还真有点相似.Java的package是以CLASSPATH中的目录为根,按目录定义和

功能丰富的 Perl: Amazon S3 上的储存管理--用于管理 S3 bucket 及其内容的 3 个 CPAN

了解 Perl 程序员如何使用 3 个 CPAN S3 模块 -- Net::Amazon::S3.Amazon::S3 和 SOAP::Amazon::S3 -- 来列出.创建和删除 bucket(S3 数据储存):列出.创建.获取和删除 bucket 中的项:以及获得一个项的元数据. Perl 开发人员拥有一个出色的资源,即 Comprehensive Perl Archive Network (CPAN).Amazon 也有一个出色的资源 Simple Storage Service (S

断点续传-请问perl是否可以改写nginx服务器得到的POST请求地址,并且不能丢失post的数据

问题描述 请问perl是否可以改写nginx服务器得到的POST请求地址,并且不能丢失post的数据 场景:后端JAVA应用作了一个断点续传的功能,测试OK,由于一些环境限制原因,前端必须用nginx转发.坑爹的是nginx的rewrite功能会把post请求变为get请求,如果使用 proxy pass则会出现如果用户上传中断,nginx不会把已经上传的东西扔给后端应用 现在考虑方向是改写post请求的链接(改成IP加端口)但是不更改别的东西,比如post的数据,方法等等,或者干脆收到此种请求

perl正则表达式匹配问题

问题描述 perl正则表达式匹配问题 10C 本人小白看不懂前辈写的perl正则表达式 m/=$/ 和 m/[=]/区别,这个要匹配的是哪两种情况 解决方案 后面的表达式是不是不完整 解决方案二: 正则表达式匹配问题perl正则表达式匹配正则表达式之匹配顺序问题 解决方案三: 本人小白看不懂前辈写的perl正则表达式 m/=$/ 和 m/[=]/区别,这个要匹配的是哪两种情况 前一个是匹配一个=号结尾的行,例如 abcdkjalsjfajsflajsfl=而后一个是匹配文本行中 包含 = 号的,

使用 cpanm 安装 Perl 模块

 cpanm 安装 Perl 模块 目录: 本文简介 1 概述 2 安装 cpanm 3 使用 cpanm 本文简介 概要:使用 cpanm 安装 Perl 模块 版本: Debian 5 (Lenny), cpanminus 1.0015 日期:2010-11-01 永久链接:http://sleepycat.org/tech/perl/cpanm 1 概述 cpanm 是所用过的安装 Perl 模块的最方便的方法. 关于 cpanm: http://search.cpan.org/~miya

oop-一道简单的OOP题目……不会做……求源程序 半小时内速求……

问题描述 一道简单的OOP题目--不会做--求源程序 半小时内速求-- 有个虚拟足球俱乐部的球队经济人又新招了5名队员,他写了下面的代码,为新队员建了 一个数组,并输出数组的所有元素.其中字符串是队员的名字,而数字则是队员的年龄. 不过有个队员的名字他竟不记得了(他的名字只好用"???"表示,年龄为0). (1)请你为``队员"这种对象定义一个类(队员信息的输出格式自定),使程序能编译通 过(不应通过修改main()函数来完成此要求).要求每个队员的姓名和年龄都是常量. in

compile httpd 2.4.9, perl, php in CentOS 6.x x64

httpd 2.4.9 在CentOS 6.x x64上的安装过程. 一. apr安装 http://apr.apache.org/download.cgi # wget http://mirror.bit.edu.cn/apache//apr/apr-1.5.1.tar.bz2 # tar -jxvf apr-1.5.1.tar.bz2 # cd apr-1.5.1 # ./configure --prefix=/opt/apr1.5.1 # make && make test # ma