☞ | ![]() ![]() |
52 |
I saved my favorite method for last:
38 sub delete_observer { 39 my ( $item, @observers_to_remove ) = @_; 40 unless ( ref $O{ $item } eq 'ARRAY' ) { 41 return 0; 42 } 43 my %ok_observers = map { $_ => 1 } @{ $O{ $item } }; 44 foreach my $observer_to_remove ( @observers_to_remove ) { 47 my $removed = delete $ok_observers{ $observer_to_remove }; 52 } 53 $O{ $item } = [ keys %ok_observers ]; 54 return scalar keys %ok_observers; 55 }
It's my favorite because it doesn't work
Suppose there are two observers, G1 and G2
Suppose you delete G2
Now %ok_observers contains G1 only
Then G1 is put back into the observers list:
53 $O{ $item } = [ keys %ok_observers ];
Oops
But wait! What about the test suite?
Oops
I have some other complaints about the test suite...
☞ | ![]() |
☞ |