| ☞ | Program
Repair Shop ![]() |
22 |
%O is overencapsulated
For example, I cannot override add_observer:
sub add_observer {
...
push @{$O{ $item }}, $observer;
if ( ref( $observer ) ) {
weaken( $O{ $item }->[ -1 ] );
}
...
}
A right way to do this:
my %Observers;
sub _ob_hash { \%Observers }
sub add_observer {
...
local *O = $self->_ob_hash;
push @{$O{ $item }}, $observer;
if ( ref( $observer ) ) {
weaken( $O{ $item }->[ -1 ] );
}
...
}
Now a subclass can get the base class to store the data somewhere accessible
By suitably overriding ->_ob_hash
| ☞ | ![]() |
☞ |