package Wx::build::MakeMaker::Hacks; use strict; use base 'Exporter'; use vars '@EXPORT_OK'; @EXPORT_OK = qw(hijack); sub _find_name($$) { my( $package, $method ) = @_; no strict 'refs'; return $package if defined &{"${package}::${method}"}; my @isa = @{$package . '::ISA'}; use strict 'refs'; foreach my $i ( @isa ) { my $p = &_find_name( $i, $method ); return $p if $p; } return; } sub hijack($$$) { my( $obj, $method, $replace ) = @_; my $spackage = ref( $obj ) || $obj; my $rpackage = _find_name( $spackage, $method ); die "Can't hijack method '$method' from package '$spackage'", unless $rpackage; my $fqn = "${rpackage}::$method"; no strict 'refs'; my $save = \&{$fqn}; undef *{$fqn}; *{$fqn} = $replace; return $save; } 1; # local variables: # mode: cperl # end: