Perl面向对象简单示例

1、说明
本程序演示了在Perl中如何进行面向对象编程:演示程序包含两个文件:person.pl 和 person.pm,把 person.pl 和 person.pm 放在当前目录下,运行"perl person.pl"即可以看到结果。person.pm定义了名为person的类。person.pl中创建了person类的实例,并测试了person的成员方法。

2、person.pm的内容  

#!/usr/bin/perl -w

package person;

use strict;

sub new {

my $class = shift();

print("CLASS = $class\n");

my $self = {};

$self->{"name"} = shift();

$self->{"sex"} = shift();

bless $self, $class;

return $self;

}

 

sub getName {

my ($self) = @_;

return $self->{"name"};

}

 

sub setName {

my ($self, $name) = @_;

$self->{"name"} = $name;

 

}

sub getSex {

my ($self) = @_;

return $self->{"sex"};

}

 

sub setSex {

my ($self, $sex) = @_;

$self->{"sex"} = $sex;

}

1;

 

 注意new方法中的最后一行:

return $self;

 

 是可以去掉的。

 

 

 

 3、person.pl的内容

 

#!/usr/bin/perl -w

use strict;

use person;

sub main() {

my $tom = person->new("Tom", "male");

my $kiss = person->new("Kiss", "female");

my @persons = ($tom, $kiss);

for my $p (@persons) {

printf("NAME: %s\tSEX: %s\n", $p->getName(), $p->getSex());

} }

&main();

 

 

4、程序运行结果

 

QUOTE:

 

 

CLASS = person
CLASS = person
NAME: Tom      SEX: male
NAME: Kiss      SEX: female


5、当调用person->new("Tom", "male")时发生了哪些事情?

sub new { my $class = shift(); print("CLASS = $class\n"); my $self = {}; $self->{"name"} = shift(); $self->{"sex"} = shift(); bless $self, $class; return $self; }

 

 

 

  • 当调用person->new("Tom", "male") 时,有3个参数被传递给person中的new函数,它们分别是: 类的名称"person"(这是一个隐含参数)、"Tom"、"male"。
  • 语句my $class = shift(); 获得第一个参数
  • 语句my $self = {}; 创建一个哈希表对象的引用
  • 语句$self->{"name"} = shift();  把传进来的第二个参数存入到哈希表中。
  • 语句$self->{"sex"} = shift();  把传进来的第三个参数存入到哈希表中。
  • 语句bless $self, $class ,我把bless理解为"把类型信息和变量绑定" :

    • $self是一个指针,在这里指向了一个哈希表对象的引用
    • $class是一个字符串,在这里是person类的名字
    • 在perl中,根据类的名字可以查找到这个类所有的成员方法和成员变量,因此类的名称就代表了类的类型信息!
    • 所谓bless就是把  person类的类型信息   赋予  哈希表对象的引用

  • 语句return $self; 则返回哈希表对象的引用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值