面向对象的 Perl
开篇
3.1 三条规则
第一,创建一个包。
要用 perl 写一个类,首先要创建一个包。 Perl 中的包已经有了一些类的特性:
* 包可以集合有关系的一组代码
* 包有自己的命名空间
第二, perl 中类的方法就是 subroutine
如果有一个变量 $refHero 指向一个 hero 的类, hero 类有 fight, fly 等的方法,通过 -> 就可以访问这些方法。 $refHero->fly; $ refHero->fight ;
用 -> 访问方法符合 perl 的一贯用法:
$refHash->{key}; # 取得哈西的值
$refArray->[$index]; # 取得数组中的元素
$refSub->(@args); # 访问一个子程序
$refObj->method(@args); # 访问类的方法
Tipps: 如果你读 reference 不熟悉的话,是着用 XML::Simple 写个小程序,你一定有很深的了解。
方法可以如下的使用,但两者之间是有区别的:
$refHero->fly(„5km“);
或是
Hero::fly(„5km“);
前者传递给 fly 的参数实际上是 ($refHero, „5km“), 而后者就像是一个普通的 sub 一样,仅仅传递了 („5km“) 。
了解到这点下面的代码就好理解了
package Hero;
sub fly
{
my ($self, @args) = @_;
}
通过 $self 就可以访问自己命名空间里的东东了。因为 perl 里,参数的传递是 call by reference, 所以上面的这种写法还有一个好处就是不会把 sub 里把传递过来的参数改了(这常常是我们不想的)。
第三, 创建一个 ref
bless 完成这一工作。 bless 有两个参数:一个 ref ,一个字符串。