Perl的面向对象方法

{ package LivingCreature;
sub speak{
my $class = shift;
my $gender = shift;
print "a $gender $class goes ", $class->sound, "!\n";
}
}

{ package Animal;
@ISA = qw(LivingCreature);
# no definition for speak()
}

{ package Mouse;
@ISA = qw(Animal);
sub sound{'squeak'}
sub speak{
my $class = shift;
$class->SUPER::speak(@_);
print "[but you can barely hear it!]\n";
}
}

Mouse->speak('female');

E:\Documents and Settings\Administrator\My Documents\PerlScript>perl perl.pl
a female Mouse goes squeak!
[but you can barely hear it!]

注解:Class->method(@args)或者my $beast= 'Class'; $beast->method(@args)将会构建('Class', @args)参数列表,然后调用Class::method('Class',@args);如果没有发现Class::method,则到@Class::ISA的包中寻找相应method。
$class->SUPER::speak(@_),从当前包的@ISA中对应的包中寻找speak方法,并将($class,@_)传递过去

如果将$class->Animal::speak(@_)换成Animal::speak($class, @_)后,因为在Animal中不存在speak方法,所以程序将出错。而现在的方法在发现Animal中不存在speak方法后将去查询他的@ISA中包的方法,发现LivingCreature存在speak方法,并调用

--------------------------------------------------------------------------------------
开发完一个类之后需要Export,接下来介绍一下相关内容
当输入use Island::Plotting::Maps qw(load_map scale_map draw_map);

其等价于:
BEGIN{
require Island::Plotting::Maps;
Island::Plotting::Maps->import(qw(load_map scale_map draw_map));
}

这里的require等价于 require "Island/Plotting/Maps.pm"

接下来利用Exporter的import以Navigate::SeatOfPants为了说明:
package Naviagte::SetOfPants;
use base qw(Exporter);  #包含import方法

our @EXPORT = qw(guess_direction_toward);
our @EXPORT_OK =qw(
get_north_from_professor
according_to_GPS
ask_the_skipper_about
);

our %EXPORT_TAGS = (
all =>  [@EXPORT, @EXPORT_OK],
gps  =>  [qw(according_to_GPS)],
direction  =>  [qw(
get_north_from_professor
according_to_GPS
ask_the_skipper_about
guess_direction_toward
)],
);

@EXPORT表示Navigate::SeatOfPants默认被import的方法,
@EXPORT_OK表示Navigate::SeatOfPants可以被import的方法
%EXPORT_TAG的key表示一组Navigate::SeatOfPants可以被import的方法
use Navigate::SeatOfPants qw(:direction);

当然也可以直接写import方法,以File::Basename为例:
sub import {
no strict 'refs';
my ($package, $file, $line) = caller;
warn "I was called by $package in $file\n";
for (qw(filename basename fileparse)){
*{$package."::$_"}= \&$_;
}
}
将生成衣调用者为前缀的函数

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24104518/viewspace-722694/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24104518/viewspace-722694/

Perl语言的面向对象编程 Perl是一种功能强大的脚本语言,以其灵活性和强大的文本处理能力而闻名。虽然Perl主要以其程序设计范式(如过程式编程和功能性编程)而广为人知,但它同样支持面向对象编程(OOP)。通过本篇文章,我们将深入探讨Perl语言中的面向对象编程,了解其基本概念、实现方式,以及如何在实际开发中应用这些概念。 阅读详情

相关推荐

perl 面向对象 new方法

[root@wx03 test]# cat Scan.pm package Scan; sub new{ my $class = shift; my $self={ 'a'=>11, 'b'=>22, 'c'=>33 }; bless $self,$class;

zhaoyangjian724的专栏 3239

Perl面向对象(2):对象

本系列: Perl面向对象(1):从代码复用开始 Perl面向对象(2):对象 Perl面向对象(3):解构——对象销毁 第3篇依赖于第2篇,第2篇依赖于1篇。 已有的代码结构 现在有父类Animal,子类Horse,它们的代码分别如下: lib/Animal.pm中: #!/usr/bin/env perl use strict; use warnings; package Ani...

weixin_34336292的博客 375

perl中的面向对象

node1:/root/20200608#cat Client.pm package Client; use Data::Dumper; sub new{ ##包的名字 my $class= shift; print "\$class==$class.\n"; my %p = @_; my $self={ 'aa'=>$p{'name'}, 'bb'=>$p{'x'}, 'cc'=>$p{'y'} }; bless $self,$class; }; sub send{ my $s..

zhaoyangjian724的专栏 619

Perl 面向对象编程时 bless()函数的使用

1、说明 本程序演示了在Perl中如何进行面向对象编程:演示程序包含两个文件:person.pl 和 person.pm,把 person.pl 和 person.pm 放在当前目录下,运行"perl person.pl"即可以看到结果。person.pm定义了名为person

xinke453的专栏 5943

Perl面向对象编程的实现与方法

本文探讨了Perl语言中对象的实现方式,包括使用数组、哈希、标量和子程序等不同数据类型来构造对象,并且详细介绍了类方法和对象方法的定义与区别。文章还讨论了如何通过访问器和修改器方法来获取和设置对象的属性,并强调了封装原则的重要性。

weixin_36122351的博客 428

Perl面向对象编程:方法与多重继承的技巧

本文深入探讨了Perl语言中面向对象编程的高级特性,包括方法调用的识别、私有方法的实现、以及多重继承的利弊。文章通过Perl代码示例,展示如何检测函数调用还是方法调用,并提供私有方法的实现方式。同时,文章探讨了Perl在多重继承方面的独特实现方法,包括如何扩展父类以及构造函数如何处理多重继承。通过这些内容,读者将更深入地理解Perl面向对象编程的灵活性和实用技巧。

weixin_36122351的博客 274

面向对象的Perl 之二

14.2.8 多态性和动态绑定 Webster 辞典把多态性(polymorphism)定义为: polymorphism: n. 1. the state or condition of being polymorphous。 为了说的更清楚些,下面是另一个定义: 具有多种形态或采取多种行为方式的能力... 同一个操作在不同的类中表现为不同的行为。 多态性拥有很多种不同的描述方式,它早

北雨南萍 1413

Perl面向对象编程中的类数据与访问器/修改器方法

本文介绍了Perl面向对象编程中如何使用访问器/修改器方法来管理对象属性,以及类数据的概念和使用。通过示例代码展示了如何创建通用的属性方法以简化对象属性的管理,并讨论了类数据的创建和管理,包括继承类数据的策略和通过导入方法设置类数据。

weixin_36122351的博客 333

Perl面向对象编程入门

因为项目原因,接触了一门新的语言—-Perl。初识之时,觉得它既像bash shell,又像C语言。因为有C/C++/Java以及shell基础,所以这门语言上水并没有很困难,但是它的面向对象还是给了我极其深刻的印象,因为它太“奇怪”了。即便是现在,我也不敢说理解了perl的面向对象编程,也仅仅是掌握了其基本的语法。本着学习分享的目的,今天,就通过一些简单代码来展示一下Perl的面向对象编程。在Ja

yangfang的博客 3577

实现高精度卷积混响--MATLAB仿真篇

一、前言 之前在STM32F407上现实了直播声卡,实现的经典Schroeder混响模型和Moorer混响模型,得到不错效果。后来得知卷积混响最为真实地表现空间的特性,所以也就尝试在MCU上实现一个高精度的卷积混响(卷积点数为32768),目前MCU出来的混响效果算得上一流水准,本人也在计划在ADI的21489或者SC584上更高精度的卷积混响。 二、卷积方式 1、conv1是使用MATLAB自带卷积函数conv 2、conv2和conv3是改进后卷积过程,具有减少运算量特点,方便嵌入式移植 clear;

Six44的博客 5079

IP路由原理、静态路由及动态路由区分

什么是路由 路由是指导IP报文发送的路径信息。 直连路由:目的地所在网络与路由器直接相连。 间接路由:目的地所在网络与路由器非直接相连。 静态路由是由管理员手工配置而生成的路由。 动态路由路由器使用路由协议从其他路由器那里获悉的路由。

weixin_42227328的博客 5469

Perl 中的 use base 的用法

use base 是面向对象编程时,用来描述“基类”的,其实说白了,use base somemodule;就相当于以下两句的结合:BEGIN{    use somemodule ();    push @ISA, qw(somemodule);}也可以同时 use base 两个或者两个以上的模块,例如:use base qw(Foo Bar);就相当于:BEGIN {    use Foo

Lynn.Zhou的专栏 4381

【UG/NX二次开发】记录在二次开发中遇到的坑

【UG/NX二次开发】记录在二次开发中遇到的坑

Trust_MJ的博客 2707

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

如果在当前类、当前类的所有基类和UNIVERSAL类中找不到请求的方法,将再次找到名为AUTOLOAD()的方法。其次,基于array方法,在定义类时,我们将为每个实例属性创建一个数组,每个对象实例的本质是对这些数组中的行的索引的引用。正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。Perl语言的正则表达式功能非常强大,基本上是常用语言中最强大的,很多语言设计正则式支持的时候都参考Perl的正则表达式。

m0_71592416的博客 318

一觉醒后ChatGPT 被淘汰了

近日,AI 界貌似出现了一种新的趋势:自主人工智能。这不是空穴来风,最近一个名为 AutoGPT 的研究开始走进大众视野。特斯拉前 AI 总监、刚刚回归 OpenAI 的 Andrej Karpathy 也为其大力宣传,并在推特赞扬:「AutoGPT 是 prompt 工程的下一个前沿。」

Rocky006的博客 13万+

CAN接受和发送失败的原因有哪些---之前调试MCP2515驱动时,数据一直发不出去,三个发送邮箱都被占满.至今未解决,读寄存器-总线错误

0.CAN总线错误分析与解决–讲的最精辟的放在最前面 我们知道CAN总线上的每个节点往总线上发送数据的同时会同时读取总线上的数据,并与自己发送的数据作对比。—CAN仲裁??? CAN总线错误分别有发送和接收错误计数,计数达到一定的累计以后就会产生CAN BUS OFF, 这说明CAN总线上出现了严重的错误。如下图CAN总线产生错误后的状态转换机制 如果出现了BUS OFF,总线上的节点需要做一些动作,例如重启CAN控制器或是重新上电,但是这些都只是一些补救措施,最根本的还是需要找到引起BUS OFF的根源

dianqicyuyan的博客 2万+

perl面向对象编程-方法的调用

①方法Perl类的方法只不过是一个Perl子程序而已,也即通常所说的成员函数。Perl的方法定义不提供任何特殊语法,但规定方法的第一个参数为对象或其被引用的包。Perl有两种方法:静态方法和虚方法。静态方法第一个参数为类名,虚方法第一个参数为对象的引用。方法处理第一个参数的方式决定了它是静态的还是虚的。静态方法一般忽略掉第一个参数,因为它们已经知道自己在哪个类了,构造函数即静态方法。虚方法通常

Lynn.Zhou的专栏 1716

陀螺仪选型避坑指南:为什么IMU660RA是智能车竞赛的性价比之选?

本文针对智能车竞赛场景,提供陀螺仪选型避坑指南,并深度解析为何IMU660RA成为性价比之选。文章指出,竞赛选型应避免盲目追求高性能“黑盒”模块,而应注重原始数据获取与算法开发。IMU660RA以其良好的常温稳定性、适中的噪声水平、极致的性价比和丰富的生态支持,成为帮助参赛者深入理解姿态解算原理、进行“白盒开发”的理想教学与实践平台。

tech5的博客 880

perl面向对象

Perl面向对象 转载:http://www.cnblogs.com/itech/archive/2012/08/21/2649580.html 首先让我们来看看有关 Perl 面向对象编程的三个基本定义:     1.  一个“对象”是指一个“有办法知道它是属于哪个类”的简单引用。(对象就是引用变量)     2.  一个“类”是指一个“有办法给属于它

frt007的专栏 568

51单片机计算器(源程序+流程图+答辩报告+综合设计)

保姆级讲解!C语言编程,使用51单片机及LCD1602显示屏实现!

m0_57007304的博客 2万+

WordPress插件depicter存在SQL注入漏洞(CVE-2025-2011)

Depicter 是一款功能强大的 WordPress 幻灯片插件,允许用户通过直观的拖放编辑器轻松创建响应式滑块、轮播和动态内容展示。该插件提供丰富的模板库、动画效果和图层控制,支持多媒体内容嵌入(如图片、视频、HTML),并优化了移动端显示和SEO性能。其无代码操作界面适合非技术用户,同时提供高级自定义选项,适用于产品展示、营销推广和视觉叙事等多种场景,是提升网站视觉吸引力的高效工具。

m0_50125527的博客 551

Perl 教学 面向对象编程

介绍如何使用Perl的面向对象编程(OOP)特性及如何构建对象,还包括继承、方法重载和数据封装等内容。 一、模块简介模块(module)就是Perl包(pachage)。Perl中的对象基于对包中数据项的引用。(引用见第x章引用。详见http://www.metronet.com/的perlmod和perlobj。 在用其它语言进行面向对象编程时,先声明一个类然后创建该类的对象(实例),...

weixin_33729196的博客 612

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

无涯教程-Perl - 面向对象

在Perl中定义一个类非常简单。类以最简单的形式对应于Perl软件包。要在Perl中创建一个类,我们首先构建一个包。Perl软件包在Perl程序中提供了一个单独的名称空间,该名称空间使子例程和变量独立于与其他软件包中的子例程和变量的冲突。其他面向对象的语言具有数据安全性的概念,以防止程序员直接更改对象数据,并且它们提供访问器方法来修改对象数据。Perl没有私有变量,但是我们仍然可以使用辅助方法的概念来操作对象数据。让我们定义一个辅助方法来获取人的名字-sub。

无涯教程 1026

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: Hadoop 0.23.x从原理详解到安装体验(3)(转)
下一篇: MySQL数据库性能优化之缓存参数优化(转)
cu10025
博客等级 码龄10年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值