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函数;