Perl object/bless

perl 对象 通过bless实现 对象只是一种特殊的引用,它知道自己是和哪个类关联在一起的,而构造器知道如何创建那种关联关系。 这些构造器是通过使用bless操作符,将一个普通的引用物转换成一个对象实现的, 阅读详情
Perl object实际上就是一个数据结构的引用,只不过用bless把它和包绑定在一起,像类一样调用函数的过程只是从bless绑定的包中调用相应函数的过程。看下边的例子:

package Test;

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

sub test{
	my $self = shift;
	print "this is test: ",%$self,"\n";
}

use Data::Dumper;
use Devel::Peek;

my $x = new Test();

# test 1
$x->test();
print Dumper $x;
Dump $x;

# test 2
$x->{one}=1;
$x->test();
print $x->{one};
print Dumper $x;
Dump $x;
执行test 1这部分,可以看到实例化的对象本质还是一个PVHV,不过它的FLAGS多了一个OBJECT,而且STASH指向Test,表明所有的函数调用都是从包Test中查找。
SV = RV(0x182a868) at 0x182a85c
  REFCNT = 1
  FLAGS = (PADMY,ROK)
  RV = 0x298ee4
  SV = PVHV(0x29e85c) at 0x298ee4
    REFCNT = 1
    FLAGS = (OBJECT,OOK,SHAREKEYS)
    STASH = 0x182a70c	"Test"
    ARRAY = 0x18246cc
    KEYS = 0
    FILL = 0
    MAX = 7
    RITER = -1
    EITER = 0x0
$VAR1 = bless( {}, 'Test' );
执行test 2这部分,把对象只当作一个引用对待,可以看到同样有效。对于Perl的OO来说,通过这种方法还可以hack它的对象。
SV = RV(0x182a868) at 0x182a85c
  REFCNT = 1
  FLAGS = (PADMY,ROK)
  RV = 0x298ee4
  SV = PVHV(0x29e85c) at 0x298ee4
    REFCNT = 1
    FLAGS = (OBJECT,OOK,SHAREKEYS)
    STASH = 0x182a70c	"Test"
    ARRAY = 0x18246cc  (0:7, 1:1)
    hash quality = 100.0%
    KEYS = 1
    FILL = 1
    MAX = 7
    RITER = -1
    EITER = 0x0
    Elt "one" HASH = 0x7f17f79a
    SV = IV(0x298f30) at 0x298f34
      REFCNT = 1
      FLAGS = (IOK,pIOK)
      IV = 1
$VAR1 = bless( {
                 'one' => 1
               }, 'Test' );

因为OO只是绑定变量和包,我们同样可以用下边的方法来实例化对象并调用函数:

my $a = {one => 1, two => 2};
bless $a,Test;

$a->test();
同样,我们也可以绑定变量到一个未定义的包,只不过调用过程的时候会出错。

my $a = {one => 1, two => 2};
bless $a,Testing;

$a->test();

Output:
Can't locate object method "test" via package "Testing" at 005.pl line 33.

参考:

perldoc -f bless

perldoc perlobj

perl 对象 bless 引用 [root@dr-mysql01 ~]# cat aa.pl use LWP::UserAgent; use Data::Dumper; my $ua = LWP::UserAgent->new; $phone=$ARGV[0]; $cc=$ARGV[1]; $ua->timeout(10); $ua->env_proxy; $ua->agent("Mozilla/8.0"); $host 阅读详情

相关推荐

COMSOL中的动网格

首先我们先了解几个概念 (1)网格重划分(remesh):就是在某些特定的区域进行网格的重新划分,在Maxwell软件中的直线运动区域,当运动物体运动后,这个区域进行重新划分。 (2)morph:网格不重新划分,小范围的进行网格变形,针对运动物体运动位移较小,对变形区域不进行重划分,能够提高效率。 (3)网格滑移(sliding):针对圆形运动区域,运动与非运动区域进行网格滑移,当然边界上两侧网格不共节点,该方法不需要网格重新划分,大部分软件针对圆形运动区域采用该方法,比如maxwell的band,b

midiio的博客 7870

Perl 语言开发(十二):面向对象编程,深入理解与实践

Perl语言以其强大的文本处理能力和灵活的语法广为人知,但其面向对象编程(OOP)特性同样值得深入探讨。本文将详细介绍Perl的面向对象编程,涵盖基础概念、类和对象的定义、方法和属性的实现、继承和多态等高级特性。通过本教程,读者将掌握如何在Perl中编写高效、可维护的面向对象程序。

1591

ESD 防护深度解析:模型、等级、系统设计与防护策略

本文系统阐述了静电放电(ESD)防护的核心技术体系。首先对比分析了HBM(人体模型)和CDM(充电设备模型)两种基础ESD模型的物理特性、测试标准及分级要求,指出相同电压下CDM的破坏性是HBM的15-20倍。其次详细解析了IEC61000-4-2系统级ESD标准,包括接触/空气放电测试方法及判定等级。重点提出了系统级防护的三层架构:空间隔离(≥10mm间距)、电气隔离(地平面分割)和TVS管选型(响应时间<1ns),并对比了MOV、SCR等防护器件特性。针对不同应用场景(消费电子、工业控制等)给出了差异化

bother3000的博客 1884

Perl Object

==================================================================================== Perl Object Invoke: 1、使用$pkg_ref->method时,第一个参数是包的引用,随后才使在调用是客户代码传入的参数; 2、使用-w参数执行perl脚本或者在脚本中加入use warnings;来使你

SHUAI-优快云 662

在树莓派5(8G版)上运行Ollama + LLM

直接上结论,Ollama在树莓派上能安装,且本身运行起来毫无压力,但具体到大语言模型,Deepseek似乎不总是最佳选择。

ki1381的专栏 1651

ANSYS 有限元分析 接触分析

目 录一、前沿二、接触单元类三、接触单元关键选项3.1 CONTA174 KeyOption3.2 TARGE170 KeyOption四、接触分析标准步骤4.1 定义实常数4.2 定义接触和目标单元4.3 创建接触和目标单元五、接触分析实例5.1 MPC5.2 标准接触六、尾声七、参考文献 阿阳的 ANSYS 使用指南,本文仅用于个人学习,除此之外,无其他任何用途。 ANSYS 有限元分析 概述 ANSYS 有限元分析 坐标系/工作平面 ANSYS 有限元分析 几何建模 ANSY

Hulunbuir 4万+

Understanding Reference, Module,Package, Object in Perl

{uderstanding=>example}

RobinHood 544

ANSYS WB 网格划分详解与技巧

本文详细介绍了网格操作中的关键设置与功能选项。主要内容包括:1)网格显示风格与物理偏好设置;2)单元阶次选择对精度的影响;3)单元尺寸控制方法;4)尺寸调整功能,重点讲解了自适应尺寸调整、增长率控制和捕获曲率等选项;5)网格质量评估标准;6)四种主要划分方法(四面体、六面体主导、扫掠、多区域)的特点与适用场景;7)三种尺寸调整方式(直接调整、边缘尺寸调整、影响范围调整)的具体应用。文章强调在实际建模中需要根据模型特点合理选择网格参数,平衡计算精度与效率。

2403_87939837的博客 1698

Perl面向对象编程(Object-Oriented Perl)翻译(1)

Perl面向对象编程 全文510页,可参考相关资料,作者:Damian Conway目录-----------------------------------------------------序前言致谢在线 1 你首先需要知道的(面向对象入门)1.1 面向对象本质.1.2 面向对象其它概念.1.3 术语:一些(很多)词汇.1.4 哪里能得到更多.1.5 概要. 2 你第二要知...

weixin_30642869的博客 181

钢铁雄心4存档修改全攻略:从基础设置到高级玩法(附国家代码表)

本文详细解析《钢铁雄心4》存档修改技巧,从基础设置到高级玩法全覆盖。包括存档文件位置、格式转换、国家实力调整、国际关系修改等实用内容,并附赠国家代码表。掌握存档修改技能,解锁游戏全部潜力,实现精细参数控制,超越控制台指令的局限。

weixin_29233857的博客 1433

爆破shadow文件密码脚本(完成版)

由于添加了一个for循环,再稍作修改,让password not found!print(f"Trying password:")显示爆破的密码和过程。将代码中的password="123456"替换成下面代码。line.strip()函数首尾去空格。

m0_56578216的博客 772

perl bless

**********本文为转载,作者写的通俗易懂,很是受教,非常感谢您的分享********************** 程序说明bless有两个参数:对象的引用、类的名称。类的名称是一个字符串,代表了类的类型信息,这是理解bless的关键。所谓bless就是把 类型信息 赋予 实例变量。程序包括5个文件:person.pm :实现了person类 dog.

Lynn.Zhou的专栏 908

构建一个基于Simulink的LC滤波器仿真模型

需求分析LC滤波器(Inductor-Capacitor Filter)是一种常见的无源滤波器,广泛应用于电力电子、通信、音频处理等领域。其主要作用是平滑输入信号中的高频谐波成分,保留低频或直流成分,从而提高输出信号的质量。在电力电子系统中,LC滤波器常用于逆变器、整流器等设备的输出端,以减少开关噪声和电磁干扰(EMI),确保输出电压和电流的稳定性。本项目将基于Simulink平台,开发一个完整的LC滤波器仿真模型,涵盖从电源输入到滤波输出的整个过程,并通过PI控制器实现对滤波效果的闭环控制。

MHD0815的博客 740

perl中bless的理解

转载自:http://blog.youkuaiyun.com/liangrockman/article/details/5674168 bless有两个参数:对象的引用、类的名称。 类的名称是一个字符串,代表了类的类型信息,这是理解bless的关键。 所谓bless就是把 类型信息 赋予 实例变量。 程序包括5个文件: person.pm :实现了person类 dog.pm :实现了

勤劳的小蜜蜂 571

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

perl中bless的理解(zz) z

bless有两个参数:对象的引用、类的名称。类的名称是一个字符串,代表了类的类型信息,这是理解bless的关键。所谓bless就是把 类型信息 赋予 实例变量。程序包括5个文件:person.pm :实现了person类 dog.pm :实现了dog类 bless.pl : 正确的使用blessbless.wrong.pl : 错误的使用blessbless.cc : 使用C++

1153

android 蓝牙通讯demo

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

无涯教程-Perl - bless函数

此函数告诉REF引用的实体,它现在是CLASSNAME包中的对象,如果省略CLASSNAME,则为当前包中的对象。建议使用bless的两个参数形式。无涯教程网提供描述此函数告诉REF引用的实体,它现在是CLASSNAME包中的对象,如果省略CLASSNAME,则为当...以下是显示其基本用法的示例代码,通过祝福对包类的引用来创建对象引用-该函数返回对祝福到CLASSNAME中的对象的引用。Perl 中的 bless函数 - 无涯教程网。以下是此函数的简单语法-

无涯教程 1163

perl中,的bless,ref函数

Perl: Bless略解URL:http://www.elanso.com/ArticleModule/P0UAMlPUM6KzJhUKPpQmKzIi.html例子2:bless函数与ref函数,以及hash1. 构造函数是类的子程序,它返回与类名相关的一个引用。将类名与引用相结合称为“祝福”一个对象,因为建立该结合的函数名为b

程序人生 2766

Perl中的bless的理解

bless有两个参数:对象的引用、类的名称。类的名称是一个字符串,代表了类的类型信息,这是理解bless的关键。所谓bless就是把 类型信息 赋予 实例变量。 [xywang@mnsdev13:~]$ cat Person.pm #!/usr/bin/perl -w package Person; use strict; sub sleep() { ...

weixin_30883777的博客 272

perl bless例子

jrhdpt02:/root/big# cat a1.pl unshift(@INC,"/root/big2"); require RegularEmployee; use Data::Dumper; $var=RegularEmployee::new(a,b,c,d); my $xx= Dumper($var); print $xx; print "\n"; jrhdpt02:/ro

zhaoyangjian724的专栏 155
上一篇: Perl B module
下一篇: Perl 新浪股票信息收集
Bai_Yuanyong
博客等级 码龄24年 46粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值