perl 对象
唯一标识: 很明显,一个%employee 是不够的,每个雇员都要求有一个唯一标识和他或她自己的属性集合。 你可以动态的分配这个数据结构,也可以返回一个指向局部数据结构的引用 Vsftp:/root/perl/18# cat a1.pl
use Data::Dumper;
sub new_employee {
my ($name,$age,$starting_position)=@_;
my $r_employee = { ##使用匿名散列表
"name" =>$name, #创建一个唯一的对象
"age" =>$age,
"position" =>$starting_position
};
return $r_employee; ##返回对象
}; $emp1 = new_employee("John Doe","32","Software Engineer");
print Dumper($emp1);
print "\n";
Vsftp:/root/perl/18# perl a1.pl
$VAR1 = {
'position' => 'Software Engineer',
'name' => 'John Doe',
'age' => '32'
}; Vsftp:/root/perl/18# cat Employee.pm
package Employee;
sub new {
my $class = shift;
my $self={
@_
};
bless $self,$class;
return $self;
};
sub promote {
my $self=shift;
my $a=shift;
my $b=shift;
return $a + $b;
};
1; Vsftp:/root/perl/18# cat a2.pl
unshift(@INC,"/root/perl/18");
use Employee;
use Data::Dumper;
my $emp=Employee->new("name"=>"John","age"=>"32","position"=>"dada");
print Dumper($emp);
print "\n";
print "11111111111111111\n";
print $emp->promote(33,44);
print "\n";
print "2222222222222222\n";
print Employee::promote($emp,45,56);
print "\n"; Vsftp:/root/perl/18# perl a2.pl
$VAR1 = bless( {
'position' => 'dada',
'name' => 'John',
'age' => '32'
}, 'Employee' ); 11111111111111111
77
2222222222222222
101 方法的第一个参数为对象 现在我们使用箭头记号来直接调用实例的方法,或者用面向对象的话说,调用对象的方法: print $emp->promote(33,44); 直接调用 当Perl 看到$emp->promote(33,44)时,它会决定$emp 属于哪个类(也就是在其中执行bless的) 在这里是Employee perl 于是就会如下调用这个函数 Employee::promote($emp,45,56); 换句话说,箭头左边的对象 只是作为相应子例程的第一个参数。 在与C++ 中不同,记号:: 和->实际上都是允许的。Perl的实例方法没有什么神奇的地方 它只是第一个参数碰巧为对象引用的普通子过程 ref 函数返回一个表示引用所指向实体类型的字符串,而对于经过bless的对象引用,它返回相应类的名字。 类方法和属性: 类属性只是包的全局变量,类方法则是不依赖任何特地实例的普通子例程。 回想一下实例方法的情况,箭头左边的对象将作为该子例程的第一个参数传递。 这里也是一样,过程HourlyEmployee::new 同样需要重写程下面这种期望的形式: 因为实例和类方法都是普通的子例程,因此你总是可以通过检查所传递的第一个参数的类型 编写一个子例程 使它具有它们任何一个的功能。 如果第一参数为类,那么就是类方法 如果第一个参数为对象,那么就是对象方法 如果我们在编写类方法时,都默认以模块的名字为它的第一个参数的话 迂回策略:一种间接的记号: 继承的必要性: Perl 允许一个模块在一个特殊的名为@ISA 的数组中指定一组其他模块的名称。 当你模块中找不到某个类或实例方法时,它就会检查那个模块的@ISA是否被初始化 如果初始化,它就会查看其中的某个模块是否支持这个"缺少"的函数 这个特性被称为 继承 重载基类:
perl 对象的更多相关文章
- perl 对象 bless 引用
[root@dr-mysql01 ~]# cat aa.pl use LWP::UserAgent; use Data::Dumper; my $ua = LWP::UserAgent->new ...
- perl 对象 通过bless实现
对象只是一种特殊的引用,它知道自己是和哪个类关联在一起的,而构造器知道如何创建那种关联关系. 这些构造器是通过使用bless操作符,将一个普通的引用物转换成一个对象实现的,
- Installing vSphere SDK for Perl
Installing vSphere SDK for Perl 你可以安装vSphere SDK 在Linux 或者Microsoft Windows 系统,或者 部署 VSphere Managem ...
- perl5 第十三章 Perl的面向对象编程
第十三章 Perl的面向对象编程 by flamephoenix 一.模块简介二.Perl中的类三.创建类四.构造函数 实例变量 五.方法六.方法的输出七.方法的调用八.重载九.析构函数十.继承十一. ...
- Perl语言编程(大骆驼)
啰嗦几句 Perl的时代已经过去,现在年轻的同事们基本上都在用Python了.但个人认为单就生物信息文本处理而言,Perl语言是绝对够用的.最主要的是,前辈们搭建的流程大多数是Perl写的,因此,如果 ...
- 11.ThinkPHP 3.1.2 连贯操作
==================================================== 一.常用连贯操作 1.where 帮助我们设置查询条件 2.order 对结果进行排序 $ar ...
- 浅谈Perl的类、包、模块与面对对象编程
http://blog.chinaunix.net/uid-27464093-id-3308003.html Perl面向对象 Perl面向对象学习例子实例代码教程 - 在我们了解perl的面向对象的 ...
- perl 传递对象到模块
perl 中的对象 就是引用 通过new方法传递数据结构给各个模块 [root@wx03 test]# cat x1.pm package x1; use Data::Dumper; sub new ...
- perl 为什么要用引用来做对象呢?
perl 为什么要用引用来做对象呢? 因为一个重要的原因是 my 引用 脱离作用域,外部仍旧生效
随机推荐
- ASP.NET MVC(一) 什么是Razor
Razor 是一种向网页添加基于服务器的代码的标记语法 Razor 不是编程与语言.它是服务端标记语言. 当网页被写入浏览器时,基于服务器的代码能够创建动态内容.在网页加载时,服务器在向浏览器返回页面 ...
- android多国语言文件夹
android多国语言文件夹文件汇总如下:(有些语言的书写顺序可能跟中文是相反的) 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh ...
- 深入理解Java的接口和抽象类 _摘抄
http://www.cnblogs.com/dolphin0520/p/3811437.html 原文 深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可 ...
- C#下如何用NPlot绘制期货股票K线图(2):读取数据文件让K线图自动更新
[内容介绍]上一篇介绍了K线图的基本绘制方法,但很不完善,本篇增加了它直接读取数据的功能,这对于金融市场的数据量大且又需要动态刷新功能的实现很重要. [实现方法] 1.需要一个数据文件,这里用的是直接 ...
- 图像储存容器Mat[OpenCV 笔记11]
IplImage 与 Mat IplImage是OpenCV1中的图像存储结构体,基于C接口创建.在退出之前必须release,否则就会造成内存泄露.在一些只能使用C语言的嵌入式系统中,不得不使用. ...
- vs的watch使用
VC调试器高级应用----WATCH窗口篇 一.格式化数据和表达式赋值语句. 常用变量格式化符(表达式的值后跟逗号,接格式化符,如"(int)0xFFFF,d"):d :有符号的 ...
- 实体框架(Entity Framework)简介
实体框架(Entity Framework)简介 简称EF,与ADO.NET关系 ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R ...
- XSS漏洞(跨站脚本)
不要轻信用户提交上来的数据alert消息太难看,因此开发一个aspx页面用来统一展示消息ShowMessage.ashx //主页将判断重定向到另一个页面 if (TextBox1.Text != & ...
- erlang 编程指南 第三章-顺序编程 课后练习
1. sum(3) => 6; sum(1,3) => 6; sum(6,6) => 6; sum(N) when is_integer(N) -> sum_acc(N,0); ...
- 自己写的访问SqlServer数据库的通用DAL层
如题,直接贴代码. 首先是DataTable转List<T>的方法,这个方法通用性极强. #region Table转List /// <summary> /// Table转 ...