- 论坛徽章:
- 3
|
本帖最后由 minirain 于 2015-09-08 17:07 编辑
回复 1# xie3ks
原书本中有些语序需要调整一下,如:
- else
- {
- die "Access type should be set or get\n";
- }
-
-
- };
- print "New Student created, we have ",++$students," students.\n";
- bless $ref, $class;
-
- }
复制代码 有的print语句要改为printf(格式输出)如:
- printf "%-25s%-5s:%-20s\n", $self, $key, $value;
复制代码 而不是:- print "%-25s%-5s:%-20s\n", $self, $key, $value;
复制代码- package Student;
- sub new
- {
- my $class = shift;
- my $data={};
- our $students;
- my $ref = sub
- {
- my ($access_type, $key, $value)=@_;
- if ($access_type eq "set")
- {
- $data->{$key} = $value;
- }
- elsif ($access_type eq "get")
- {
- return $data->{$key};
- }
- elsif ($access_type eq "keys")
- {
- return keys %{$data};
- }
- elsif ($access_type eq "destroy")
- {
- $students--;
- return $students;
- }
- else
- {
- die "Access type should be set or get\n";
- }
-
-
- };
- print "New Student created, we have ",++$students," students.\n";
- bless $ref, $class;
-
- }
- sub set{
- my ($self, $key, $value) = @_;
- $self->("set", $key, $value);
- }
- sub get{
- my ($self, $key) = @_;
- return $self->("get", $key);
- }
- sub display{
- my $self = shift;
- my @keys = $self ->("keys");
-
- #@keys = reverse (@keys) ;
-
- foreach my $key(@keys)
- {
- my $value = $self->("get", $key);
- printf "%-25s%-5s:%-20s\n", $self, $key, $value;
- }
- print "\n";
- }
- sub DESTROY{
- my $self = shift;
- print "Object going out of scope:\n";
- print "Students remain: " , $self->("destroy") , "\n";
- }
- 1;
复制代码 运行结果如下:
|
|