Hi,
normalerweise sollte doch bei dem folgenden Beispielcode eine "3" herauskommen, also jedes Objekt aufgerufen sein, oder? Falls nicht, wie kann ich diese Anforderung (alle Objekte inkl. das höchste Objekt werden getriggert) umsetzen?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/perl -wT
############################################################################
package P1;
sub new() {
warn __PACKAGE__;
my $this = shift(@_); # Invocand package name.
my $class = ref($this) || $this;
my $self = {};
bless($self, $class);
$self->initialize({@_});
return($self);
}
sub initialize($) { my $self = shift(@_); $self->{counter}++; };
############################################################################
package P2;
our @ISA = ('P1');
sub new() {
warn __PACKAGE__;
my $this = shift(@_); # Invocand package name.
my $class = ref($this) || $this;
my $self = {};
bless($self, $class);
$self->SUPER::initialize({@_});
$self->initialize({@_});
return($self);
}
sub initialize($) { my $self = shift(@_); $self->{counter}++; };
############################################################################
package P3;
our @ISA = ('P2');
sub new() {
warn __PACKAGE__;
my $this = shift(@_); # Invocand package name.
my $class = ref($this) || $this;
my $self = {};
bless($self, $class);
$self->SUPER::initialize({@_});
$self->initialize({@_});
return($self);
}
sub initialize($) { my $self = shift(@_); $self->{counter}++; };
############################################################################
package main;
printf "Depth: %d of 3\n", P3->new()->{counter};
############################################################################
1; # Don't forget to return a true value from the file.