高效的属性存储: 我们一向使用散列表来存储对象属性,我们这样做有几个好的理由: 1.每个属性都是自我描述的(也就是说,每个属性的名字和类型可以很容易的从对象中获取), 这样可以很容易的来编写可读性好的代码。它还可以使模块无需对象显示合作就能够进行自动的 对象持续性存储或对象的可视化。 2.位于继承层次中的每个类都可以自由独立的添加属性 ObjectTemplate:使用数组来存储属性: 这一节展示的模块使用数组来存储属性(但是不是那种每个对象一个数组的方式) 注意:Perl 允许你不存在用法歧义的情况下,省略任何调用方法的括号。 与前面的例子一样,任何跟在箭头后面的单词都被当作是一个方法。 Vsftp:/root/perl/19# cat ObjectTemplate.pm package ObjectTemplate; require Exporter; @ISA = qw(Exporter); @EXPORT_OK = qw(new position); sub new { my $self = {}; my $class = shift; ##第一个参数类的名字; my $self ={@_}; bless $self,$class; return $self; }; sub position { my $self=shift; my $Actress=shift; return "$Actress.length$Actress" }; 1; Vsftp:/root/perl/19# cat Employee.pm package Employee; use ObjectTemplate qw/new position/; 1; Vsftp:/root/perl/19# cat a1.pl unshift(@INC,"/root/perl/19"); use Employee; use Data::Dumper; $obj = Employee->new("name"=>"Normae Jean", "age" =>25 ) ##new()方法由ObjectTemplate创建 ; print Dumper($obj); print " "; print $obj->{name}; print " "; print $obj->{age}; print " "; print $obj->position("Actress"); Vsftp:/root/perl/19# perl a1.pl $VAR1 = bless( { 'name' => 'Normae Jean', 'age' => 25 }, 'Employee' ); Normae Jean 25 Actress.lengthActressVsftp:/root/perl/19# Vsftp:/root/perl/19# cat Employee.pm package Employee; use ObjectTemplate qw/new position/; sub promote { my $self=shift; my $current_position=$self->position(); ##获取属性 my $next_position = $current_position."abc123"; $self->position($next_position); }; 1; Vsftp:/root/perl/19# cat a1.pl unshift(@INC,"/root/perl/19"); use Employee; use Data::Dumper; $obj = Employee->new("name"=>"Normae Jean", "age" =>25 ) ##new()方法由ObjectTemplate创建 ; print Dumper($obj); print " "; print $obj->{name}; print " "; print $obj->{age}; print " "; print $obj->position("Actress"); print " "; print $obj->promote(); Vsftp:/root/perl/19# perl a1.pl $VAR1 = bless( { 'name' => 'Normae Jean', 'age' => 25 }, 'Employee' ); Normae Jean 25 Actress.lengthActress .lengthabc123.length.lengthabc123Vsftp:/root/perl/19#