Perl中的bless的理解

本文通过具体的Perl脚本示例介绍了如何使用bless函数将类型信息赋予实例变量,并展示了如何通过bless在一个对象上切换不同的类行为。同时,文章还提供了错误用法示例以加深理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

bless有两个参数:对象的引用、类的名称。 
类的名称是一个字符串,代表了类的类型信息,这是理解bless的关键。 
所谓bless就是把 类型信息 赋予 实例变量。 

 

[xywang@mnsdev13:~]$ cat Person.pm 
#!/usr/bin/perl -w
package Person;
use strict;

sub sleep() {
       my ($self) = @_;
       my $name = $self->{"name"};

       print("$name is person, he is sleeping\n");
}

sub study() {
       my ($self) = @_;
       my $name = $self->{"name"};

       print("$name is person, he is studying\n");
}
return 1;



[xywang@mnsdev13:~]$ cat Dog.pm 
#!/usr/bin/perl -w
package Dog;
use strict;

sub sleep() {
       my ($self) = @_;
       my $name = $self->{"name"};

       print("$name is dog, he is sleeping\n");
}

sub bark() {
       my ($self) = @_;
       my $name = $self->{"name"};

       print("$name is dog, he is barking\n");
}

return 1;

[xywang@mnsdev13:~]$ cat bless.pl 
#!/usr/bin/perl
use strict;
use Person;
use Dog;

sub main()
{
       my $object = {"name" => "tom"};

       # 把"tom"变为人
       bless($object, "Person");
       $object->sleep();
       $object->study();

       # 把"tom"变成狗
       bless($object, "Dog");
       $object->sleep();
       $object->bark();

       # 再把"tom" 变成人
       bless($object, "Person");
       $object->sleep();
       $object->study();
}

&main();

[xywang@mnsdev13:~]$  ./bless.pl   
tom is person, he is sleeping
tom is person, he is studying
tom is dog, he is sleeping
tom is dog, he is barking
tom is person, he is sleeping
tom is person, he is studying

  以下为错误的使用: 

[xywang@mnsdev13:~]$ cat wrong_bless.pl  
#!/usr/bin/perl
use strict;
use Person;
use Dog;

sub main()
{
       my $object = {"name" => "tom"};

       #没有把类型信息和$object绑定,因此无法获知$object有sleep方法
       $object->sleep();
       $object->study();
}

&main();

[xywang@mnsdev13:~]$ ./wrong_bless.pl   
Can't call method "sleep" on unblessed reference at ./wrong_bless.pl line 11.

  

转载于:https://www.cnblogs.com/yanzibuaa/p/7700832.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值