唯一标识:

很明显,一个%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. com.android.builder.packaging.DuplicateFile

    解决方法:     packagingOptions {        exclude 'META-INF/DEPENDENCIES'        exclude 'META-INF/NOTICE' ...

  2. Struts1和Struts2的区别和对比(完整版)

    Struts2其实并不是一个陌生的Web框架,Struts2是以Webwork的设计思想为核心,吸收了Struts1的优点,因此,可以认为Struts2是Struts1和Webwork结合的产物. 简 ...

  3. C10K问题2

    http://blog.csdn.net/zhoudaxia/article/details/12920993 是时候让 Web 服务器同时处理一万客户端了,你不觉得吗?毕竟,现在的 Web 是一个大 ...

  4. ios Toll-Free Bridging

    有一些数据类型是能够在 Core Foundation Framework 和 Foundation Framework 之间交换使用的.这意味着,对于同一个数据类型,你既可以将其作为参数传入 Cor ...

  5. 版本控制:集中式 vs 分布式

    集中式 CVCS的版本库集中存放在中央服务器,而工作时都是用自己的电脑,所以要先从中央服务器取得最新的版本,然后工作完后再将自己的代码推送给中央服务器. CVS:最早的.开源.免费.由于自身设计的问题 ...

  6. WKWebView无法(通过URL schemes)跳转到其他App

    Custom scheme URL 在WKWebView中默认是不支持的 (但Safari可以). 我们可以通过NSError来进行一些处理从而使得程序可以正常跳转: func webView(web ...

  7. Win32 CreateWindow GdiPlus

    #include "stdafx.h" #include "TestGidPlus.h" LRESULT CALLBACK WndProc(HWND, UINT ...

  8. IIS原理学习

    IIS 原理学习 首先声明以下内容是我在网上搜索后整理的,在此只是进行记录,以备往后查阅只用. IIS 5.x介绍 IIS 5.x一个显著的特征就是Web Server和真正的ASP.NET Appl ...

  9. javascript face ++

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. linux命令之chown命令

    发布:JB01   来源:脚本学堂     [大 中 小] 本文介绍下,linux系统中用于文件与目录权限管理的命令 chown命令的用法,chown将指定文件的拥有者改为指定的用户或组.有需要的朋友 ...