程序说明
网上的很多教程都没有把bless讲清楚,我通过摸索和实验,终于明白bless是什么意思了,简单的讲:
* bless有两个参数:对象的引用、类的名称。
* 类的名称是一个字符串,代表了类的类型信息,这是理解bless的关键。
* 所谓bless就是把 类型信息 赋予 实例变量。
程序包括5个文件:
person.pm :实现了person类
dog.pm :实现了dog类
bless.pl : 正确的使用bless
bless.wrong.pl : 错误的使用bless
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;
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;
bless.pl
#!/usr/bin/perl =w
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();
# 程序运行时输出:
# 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
bless.wrong.pl
#!/usr/bin/perl =w
use strict;
use person;
use dog;
sub main()
{
my $object = {"name" => "tom"};
# 没有把类型信息和$object绑定,因此无法获知$object有sleep方法
$object->sleep();
$object->study();
}
&main();
# 程序运行输出为:
# Can't call method "sleep" on unblessed reference at bless.wrong.pl line 10.
分享到:
相关推荐
bless $self, $class; return $self; } sub do_something { my $self = shift; print "Doing something...\n"; } package main; my $obj = MyClass->new(); $obj->do_something(); ``` #### 错误处理 Perl...
### Perl大骆驼书知识点解析 #### 一、概述 《Perl大骆驼书》作为Perl编程语言的经典教程之一,以其全面深入的内容受到广大程序员的喜爱。本书覆盖了Perl语言的核心特性与高级用法,旨在帮助读者掌握这门功能强大且...
来编写更严格的代码,以及使用package, bless, sub, @ISA等关键字来创建类和对象。 8. **符号表和符号引用**:Perl的内部符号表可以用来检查和修改变量状态,这对于理解和调试代码非常有用。 9. **上下文**:Perl...
` bless`函数用于将对象关联到特定的类,`@ISA`数组用于指定类的继承关系。 此外,Perl还有强大的文件和I/O处理能力,可以方便地打开、读写文件,进行文件系统的操作,如`open`、`close`、`、`>`和`<>`等。 本...
### Perl的面向对象编程:深度解析与应用 #### 引言 Perl,作为一种灵活而强大的脚本语言,自诞生以来就深受系统管理员、程序员及Web开发者喜爱。它不仅支持过程式编程,还提供了面向对象(Object-Oriented ...
【标题】:Perl 面向对象编程指南 【描述】:本文将深入探讨使用Perl进行面向对象编程的核心概念,包括包、模块、类、构造函数、实例变量、方法、重载、析构函数和继承等关键要素。 【标签】:"perl 面向对象 OOP ...
Perl支持面向对象编程,可以通过`bless`和`new`构建类和对象,使用`->`访问方法和属性。 #### 四、Perl与数据库交互 1. **DBI模块** - DBI(Database Independent Interface)是Perl中的数据库抽象层,允许程序...
- `bless`操作符是Perl OOP的核心之一,它用于将一个引用与一个包关联起来,从而创建一个对象。 - 示例代码中`bless $this;`将指向匿名哈希的引用`$this`与当前包`Cocoa`关联,创建了对象。 #### 构造函数`new()` -...
13.2.3 bless函数 13.2.4 方法 13.2.5 多态性和动态绑定 13.2.6 析构函数和无用存储单元收集 13.3 继承 13.3.1 @ISA数组和调用方法 13.3.2 $AUTOLOAD,sub AUTOLOAD和UNIVERSAL 13.3.3 派生...
bless $self, $class; return $self; } sub get_name { my $self = shift; return $self->{name}; } sub set_age { my ($self, $age) = @_; $self->{age} = $age; } 1; ``` 然后可以这样使用这个类: ```...
- 特性(Attributes)和构造器(Constructors)的使用,如何通过`bless`函数将数据结构转化为对象。 - 封装(Encapsulation)和数据隐藏,以及如何通过访问器和修改器方法控制对象属性的读写。 2. **模块和CPAN ...
bless $self, $class; return $self; } sub get_name { my ($self) = @_; return $self->{name}; } package main; my $john = Person->new(name => "John Doe"); print "Name: ", $john->get_name(), "\...
bless $self, $class; return $self; } sub some_method { my $self = shift; # 方法体 } 1; # 使用类 my $obj = MyClass->new(); $obj->some_method(); ``` 总之,Perl脚本大全是一个宝贵的资源,它涵盖了...
`bless`函数用于创建对象,`->`操作符调用方法。 九、错误处理 Perl中的错误通常通过`die`或`warn`函数处理,它们会终止程序或发出警告信息。可以使用`eval`捕获运行时错误。 十、perl最佳实践 - 使用明确的数据...
- 使用`bless`关键字可以将普通的Perl哈希引用转换为对象。 - Perl的类可以使用`package`关键字来定义,并通过继承机制扩展类的功能。 通过以上概述可以看出,虽然提供的材料主要涉及Bash脚本,但从中我们仍然...
- `bless()`: 将标量转换为对象引用。 9. **错误处理和调试函数**: - `die()`: 产生错误消息并退出程序。 - `warn()`: 产生警告消息但不退出程序。 10. **散列(哈希)操作函数**: - `%hash`: 散列数据结构...
其他:bless, defined, do, eval, formline, import, ref, scalar, syscall, tie, tied, undef, untie, wantarray 网络:endnetent, getnetbyaddr, getnetbyname, getnetent, setnetent 输出:die, print, printf,...
bless $self, $class; } 1; # 结束包声明 ``` #### 3. 面向对象编程(Object-Oriented Programming) - **类与对象**:在Perl中可以通过包来实现面向对象编程。每个包都可以被视为一个类,而该类的实例就是对象...
- **类与对象**:通过`package`定义类,并使用`bless`创建对象。 - **继承与封装**:Perl支持单继承或多继承,可以通过访问控制修饰符实现封装。 - **方法重载与多态**:通过定义同名的方法来实现方法重载;多态性则...