☞ | 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
☞ | ☞ |