唯一标识:

很明显,一个%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 对象的更多相关文章

  1. perl 对象 bless 引用

    [root@dr-mysql01 ~]# cat aa.pl use LWP::UserAgent; use Data::Dumper; my $ua = LWP::UserAgent->new ...

  2. perl 对象 通过bless实现

    对象只是一种特殊的引用,它知道自己是和哪个类关联在一起的,而构造器知道如何创建那种关联关系. 这些构造器是通过使用bless操作符,将一个普通的引用物转换成一个对象实现的,

  3. Installing vSphere SDK for Perl

    Installing vSphere SDK for Perl 你可以安装vSphere SDK 在Linux 或者Microsoft Windows 系统,或者 部署 VSphere Managem ...

  4. perl5 第十三章 Perl的面向对象编程

    第十三章 Perl的面向对象编程 by flamephoenix 一.模块简介二.Perl中的类三.创建类四.构造函数 实例变量 五.方法六.方法的输出七.方法的调用八.重载九.析构函数十.继承十一. ...

  5. Perl语言编程(大骆驼)

    啰嗦几句 Perl的时代已经过去,现在年轻的同事们基本上都在用Python了.但个人认为单就生物信息文本处理而言,Perl语言是绝对够用的.最主要的是,前辈们搭建的流程大多数是Perl写的,因此,如果 ...

  6. 11.ThinkPHP 3.1.2 连贯操作

    ==================================================== 一.常用连贯操作 1.where 帮助我们设置查询条件 2.order 对结果进行排序 $ar ...

  7. 浅谈Perl的类、包、模块与面对对象编程

    http://blog.chinaunix.net/uid-27464093-id-3308003.html Perl面向对象 Perl面向对象学习例子实例代码教程 - 在我们了解perl的面向对象的 ...

  8. perl 传递对象到模块

    perl 中的对象 就是引用 通过new方法传递数据结构给各个模块 [root@wx03 test]# cat x1.pm package x1; use Data::Dumper; sub new ...

  9. perl 为什么要用引用来做对象呢?

    perl 为什么要用引用来做对象呢? 因为一个重要的原因是 my 引用 脱离作用域,外部仍旧生效

随机推荐

  1. ASP.NET MVC(一) 什么是Razor

    Razor 是一种向网页添加基于服务器的代码的标记语法 Razor 不是编程与语言.它是服务端标记语言. 当网页被写入浏览器时,基于服务器的代码能够创建动态内容.在网页加载时,服务器在向浏览器返回页面 ...

  2. android多国语言文件夹

    android多国语言文件夹文件汇总如下:(有些语言的书写顺序可能跟中文是相反的) 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh ...

  3. 深入理解Java的接口和抽象类 _摘抄

    http://www.cnblogs.com/dolphin0520/p/3811437.html 原文 深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可 ...

  4. C#下如何用NPlot绘制期货股票K线图(2):读取数据文件让K线图自动更新

    [内容介绍]上一篇介绍了K线图的基本绘制方法,但很不完善,本篇增加了它直接读取数据的功能,这对于金融市场的数据量大且又需要动态刷新功能的实现很重要. [实现方法] 1.需要一个数据文件,这里用的是直接 ...

  5. 图像储存容器Mat[OpenCV 笔记11]

    IplImage 与 Mat IplImage是OpenCV1中的图像存储结构体,基于C接口创建.在退出之前必须release,否则就会造成内存泄露.在一些只能使用C语言的嵌入式系统中,不得不使用. ...

  6. vs的watch使用

    VC调试器高级应用----WATCH窗口篇 一.格式化数据和表达式赋值语句. 常用变量格式化符(表达式的值后跟逗号,接格式化符,如"(int)0xFFFF,d"):d  :有符号的 ...

  7. 实体框架(Entity Framework)简介

    实体框架(Entity Framework)简介 简称EF,与ADO.NET关系 ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R ...

  8. XSS漏洞(跨站脚本)

    不要轻信用户提交上来的数据alert消息太难看,因此开发一个aspx页面用来统一展示消息ShowMessage.ashx //主页将判断重定向到另一个页面 if (TextBox1.Text != & ...

  9. erlang 编程指南 第三章-顺序编程 课后练习

    1. sum(3) => 6; sum(1,3) => 6; sum(6,6) => 6; sum(N) when is_integer(N) -> sum_acc(N,0); ...

  10. 自己写的访问SqlServer数据库的通用DAL层

    如题,直接贴代码. 首先是DataTable转List<T>的方法,这个方法通用性极强. #region Table转List /// <summary> /// Table转 ...