在现代 Perl 中定义类
尽管可用,但在现代 Perl 中不建议从头开始定义类。使用辅助 OO 系统之一,提供更多功能和便利。这些系统包括:
-
Moose
- 灵感来自 Perl 6 OO 设计 -
Class::Accessor
- Moose 的轻量级替代品 -
Class::Tiny
- 真正极小的类建设者
驼鹿
package Foo;
use Moose;
has bar => (is => 'ro'); # a read-only property
has baz => (is => 'rw', isa => 'Bool'); # a read-write boolean property
sub qux {
my $self = shift;
my $barIsBaz = $self->bar eq 'baz'; # property getter
$self->baz($barIsBaz); # property setter
}
Class::Accessor(Moose 语法)
package Foo;
use Class::Accessor 'antlers';
has bar => (is => 'ro'); # a read-only property
has baz => (is => 'rw', isa => 'Bool'); # a read-write property (only 'is' supported, the type is ignored)
Class::Accessor(本机语法)
package Foo;
use base qw(Class::Accessor);
Foo->mk_accessors(qw(bar baz)); # some read-write properties
Foo->mk_accessors(qw(qux)); # a read-only property
类::微小
package Foo;
use Class::Tiny qw(bar baz); # just props