我正在研究Perl OO(Perl新手)。我創建了一個簡單的例子層次:
父類:Perl在運行時是否有實際的派生類?
#!usr/bin/perl
use strict;
use warnings;
package Objs::Employee;
my $started;
sub new {
my ($class) = @_;
my $cur_time = localtime;
my $self = {
started => $cur_time,
};
print "Time: $cur_time \n";
bless $self;
}
sub get_started {
my ($class) = @_;
return $class->{started};
}
sub set_started {
my ($class, $value) = @_;
$class->{started} = $value;
}
1;
子類:
#!/usr/bin/perl
package Objs::Manager;
use strict;
use warnings;
use base qw (Objs::Employee);
my $full_name;
sub new {
my ($class, $name) = @_;
my $self = $class->SUPER::new();
$self->{full_name} = $name;
return $self;
}
1;
我嘗試按如下測試:
#!/usr/bin/perl
use strict;
use warnings;
use Objs::Manager;
my $emp = Objs::Manager->new('John Smith');
use Data::Dumper;
print Dumper($emp);
結果:
時間:Sun Sep 29 12:56:29 2013
$VAR1 = bless({
'started' => 'Sun Sep 29 12:56:29 2013',
'full_name' => 'John Smith'
}, 'Objs::Employee');
問題:爲什麼轉儲中報告的對象是Obj :: Employee而不是Obj :: Manager?
我在Manager上調用了new。
順便說一句,因爲'get_started'和'set_started'方法是實例方法(unli ke'new'是一個類方法),它們的第一個參數將是類的一個實例,而不是類本身。所以你應該稱之爲'$ self'或者其他的東西來避免混淆。 –
Objs :: Employee中的$ started包變量未使用。 –