Perl中的bless的理解


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.

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM