唯一标识:

很明显,一个%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. Unity3D 之3D游戏入门Hello world(一)

    这几天开始玩Unity3D 有关3D的内容了,去年开始玩过一段时间的2D制作,不过因为年初找工作,所以放了一段时间, 现在再捡起来发现忘的已经差不多了,只能再从头开始,所以就从3D开始算了.下面是3D ...

  2. HttpServlet was not found on the Java

    今天新建jsp时出现了一个错误,如下图 分析:应该是没有找到相关jar包 解决方案: 如图: 这回就没错了

  3. C# 中使用win32函数 GetScrollInfo返回false 返回引用全是零的问题

    最近做一个项目要获得ScrollBar的位置,因为.net找不到此类功能,只好用MFC中的函数了,GetScrollPos只返回listview顶部的位置,此时我找到了GetScrollInfo,觉得 ...

  4. html-----008

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

  5. UVA 11384 Help is needed for Dexter(问题转化 递归)

    Help is needed for Dexter Time Limit: 3 Second Dexter is tired of Dee Dee. So he decided to keep Dee ...

  6. 九度OJ 1452 搬寝室 -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1452 题目描述: 搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3 ...

  7. 【Android】Sqlite3命令详解

    Sqlite3常用命令 Sqlite3命令有"."符合作为前缀. 基本操作 1.创建或者打开数据库 sqlite3 xxx.db 如果xxx.db存在则打开如果没有则新建此时执行创 ...

  8. 相看系统中用户的信息 passwd, shadow

    用用户的信息都保存在 etc/passwd 和 etc/shadow 文件中,其中 shadow 保存的是经过加密码的 能过 cat etc/passwd 和 cat etc/shadow 来查看相关 ...

  9. 由css属性:vertial-align想到的。。

    我的笔记本:型号 acer4750G-2412g50mnkk 分辨率:1333*768,点距:0.25933mm; 12px下的font-size: 默认line-height减去font-size: ...

  10. Learn Docker

    Learn Docker A Container is to VM today, what VM was to Physical Servers a while ago. The workload s ...