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

Perl中的bless的理解相关推荐

  1. Perl中删除或替换字符串中特殊字符(如空格)的方法

    今天在写实验代码的时候,突然有了这样一个需求,就是用Perl将包含换行(或回车)的字符串变成一行,并且每一行用空格分隔,经过搜索,网友介绍了这样的写法: [plain] view plaincopy ...

  2. [译]Perl中的数组

    原文:http://perl5maven.com/perl-arrays 在本篇Perl教程中,我们将会学习Perl中的数组.本文只是对Perl中的数组进行了一下概述,在以后的文章中,我们还会更加详细 ...

  3. perl中的文件句柄

    文件句柄 文件句柄就是Perl程序里的某个名 称,代表Perl进程与外界之间的输入/输出联系.文件句柄的命名和Perl中其它变量命名没有差别(数字.下划线.字母构成,字母.下划线开头),因没 有任何的 ...

  4. linux shell bin sh,linux shell中#bin/sh的理解

    摘要 腾兴网为您分享:linux shell中#bin/sh的理解,支付旭尊,小熊到家,天天美剧,淘金宝等软件知识,以及维棠flv视频软件,usb抓包工具,红警2无敌,ucbug造梦西游4,壁纸工作室 ...

  5. MATLAB中的函数句柄 理解

    MATLAB中的函数句柄 理解 https://zhuanlan.zhihu.com/p/266263265 https://blog.csdn.net/kevinhg/article/details ...

  6. 对网络中安全审计产品的理解

    对网络中安全审计产品的理解<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...

  7. ArcEngine中IFeatureClass.Search(filter, Recycling)方法中Recycling参数的理解

    转自 ArcEngine中IFeatureClass.Search(filter, Recycling)方法中Recycling参数的理解 ArcGIS Engine中总调用IFeatureClass ...

  8. Perl中的单行凝视和多行凝视

    同其它大多数编程语言一样.Perl中的单行凝视也是#开头.比如: #print "Hello,World!"; 但多行凝视.不同的语言有不同的凝视方式,比方说: Java,C/C+ ...

  9. KMP中next数组的理解

    next数组是KMP的核心,但对于next数组我们总是有时候感觉明白了,但有时候又感觉没明白,现在我就说下我自己对KMP中next数组的理解,首先next[i]上的数字的意义,next[i]表示的是当 ...

最新文章

  1. Selenium3自动化测试——18.窗口截图
  2. APUE学习笔记之UNIX系统概述(1)
  3. php获取跳转之后的网址,php如何获得网址跳转之后的网址
  4. python压缩文件不带根路径_python 压缩文件(解决压缩路径问题)
  5. html js控制页面蒙版,JavaScript蒙板(model)功能的简单实现代码
  6. 使用EntityFramework Core和Enums作为字符串的ASP.NET Core Razor页面——第三部分
  7. web前端开发要不要找个师傅带?
  8. System.Convert 的一些事
  9. MySQL中boolean类型设置
  10. JS 替换字符串中指定字符
  11. u盘芯片 测试软件,U盘芯片检测工具(Chip Genius)
  12. u盘启动进入grub linux,利用grub4dos的u盘启动盘拯救linux系统
  13. 使用office tool plus清除office激活状态
  14. php radio是什么意思,radio是什么意思_radio在线翻译_英语_读音_用法_例句_海词词典...
  15. 有心杀贼,无力回天出处
  16. 客户端登陆 T3标准版,已停止工作
  17. 为什么最大速度是光速
  18. arm linux not syncing,Linux系统启动中途停止,提示Kernel panic - not syncing: Attempted to kill init!...
  19. 122.Linux系统和Shell命令行简介,走上数据分析之路
  20. 《 ROP EDGE : TOWARDS DEEP GRAPH CONVOLU - TIONAL NETWORKS ON NODE CLASSIFICATION》

热门文章

  1. ChatGPT百科全书(全网最全面)
  2. Java项目:JSP中华传统美食网站平台管理系统
  3. C++中map的遍历
  4. Thread.setDaemon
  5. MySQL备份恢复方案
  6. 正则表达式的含义于简介
  7. Unity论坛Hack –更新
  8. [python] 使用Jieba工具中文分词及文本聚类概念
  9. KaTeX数学公式总结
  10. cvCvtColor 颜色空间转换函数