Perl tips series 2
perl OOP 浅尝辄止一
在perl中,至少是perl5中,class是通过package来实现的,如下。
package CD;
use strict;
sub new {
my $class = shift;
my $self = {};
bless $self, $class;
}
sub init {
my $self = shift;
$self->{music} = shift;
return $self;
}
sub print_me {
my $self = shift;
print "music = $self->{music}\n";
}
1;
有几个注意的点:
- bless是把hash ref和class关联起来,每一个objet其实就是一个hash ref;
- 注意$class和$self不要混淆了,$class就是new的时候传进来的类名字,$self是hash ref;
- package 最后的返回1,必不可少;
我们来使用这个类,如下:
use FindBin;
use lib "$FindBin::Bin";
use CD;
my $cd = CD->new;
$cd->init('ABC');
$cd->print_me;
- 为了让perl解释器能够找到我们的类,通过FindBin来指出路径;
- 构建一个类的对象时,千万不能写成CD::new,要定位好久才发现,CD::new其实是选择了namespace的CD这个package里的new,并不是执行一个class的new函数;