54 lines
966 B
Perl
54 lines
966 B
Perl
package T;
|
|
sub new {
|
|
my $cls = shift;
|
|
bless [ @_ ], $cls
|
|
}
|
|
|
|
sub set_data {
|
|
my $self = shift;
|
|
@$self = @_;
|
|
}
|
|
|
|
sub copy {
|
|
my $self = shift;
|
|
bless [ @$self ], ref $self;
|
|
}
|
|
|
|
sub manifest {
|
|
my $self = shift;
|
|
print "type T, content: @$self\n\n";
|
|
}
|
|
|
|
package S;
|
|
our @ISA = 'T';
|
|
# S is inheriting from T.
|
|
# 'manifest' method is overriden, while 'new', 'copy' and
|
|
# 'set_data' are all inherited.
|
|
sub manifest {
|
|
my $self = shift;
|
|
print "type S, content: @$self\n\n";
|
|
}
|
|
|
|
package main;
|
|
|
|
print "# creating \$t as a T\n";
|
|
my $t = T->new('abc');
|
|
$t->manifest;
|
|
|
|
print "# creating \$s as an S\n";
|
|
my $s = S->new('SPQR');
|
|
$s->manifest;
|
|
|
|
print "# make var \$x as a copy of \$t\n";
|
|
my $x = $t->copy;
|
|
$x->manifest;
|
|
|
|
print "# now as a copy of \$s\n";
|
|
$x = $s->copy;
|
|
$x->manifest;
|
|
|
|
print "# show that this copy is indeed a separate entity\n";
|
|
$x->set_data('totally different');
|
|
print "\$x is: ";
|
|
$x->manifest;
|