Add libwx-perl
[pkg-perl] / deb-src / libwx-perl / libwx-perl-0.96 / blib / lib / Wx / build / MakeMaker / Hacks.pm
1 package Wx::build::MakeMaker::Hacks;
2
3 use strict;
4 use base 'Exporter';
5 use vars '@EXPORT_OK';
6
7 @EXPORT_OK = qw(hijack);
8
9 sub _find_name($$) {
10   my( $package, $method ) = @_;
11
12   no strict 'refs';
13   return $package if defined &{"${package}::${method}"};
14   my @isa = @{$package . '::ISA'};
15   use strict 'refs';
16
17   foreach my $i ( @isa ) {
18     my $p = &_find_name( $i, $method );
19     return $p if $p;
20   }
21
22   return;
23 }
24
25 sub hijack($$$) {
26   my( $obj, $method, $replace ) = @_;
27   my $spackage = ref( $obj ) || $obj;
28   my $rpackage = _find_name( $spackage, $method );
29
30   die "Can't hijack method '$method' from package '$spackage'",
31     unless $rpackage;
32
33   my $fqn = "${rpackage}::$method";
34   no strict 'refs';
35   my $save = \&{$fqn};
36   undef *{$fqn};
37   *{$fqn} = $replace;
38
39   return $save;
40 }
41
42 1;
43
44 # local variables:
45 # mode: cperl
46 # end: