Acme-AutoloadAll
view release on metacpan or search on metacpan
lib/Acme/AutoloadAll.pm view on Meta::CPAN
};
}
sub find_function {
my $function = shift;
my $package = shift || 'main';
my $seen = shift || {};
# remove last ::
$package =~ s/::$//;
return undef if (exists($seen->{$package}));
print STDERR "Searching '$function' in '$package'...\n" if ($DEBUG);
# check if the current package has the function
my $sub = $package->can($function);
print STDERR "Found!\n" if ($DEBUG && (ref($sub) eq 'CODE'));
return $sub if (ref($sub) eq 'CODE');
$seen->{$package} = 1;
# check sub packages
my $symbols = do { no strict 'refs'; \%{$package . '::'} };
my @packages = grep { $_ =~ m/::$/ } keys(%$symbols);
foreach my $pkg (@packages) {
$pkg = $package . '::' . $pkg unless ($package eq 'main');
$sub = find_function($function, $pkg, $seen);
return $sub if (ref($sub) eq 'CODE');
}
# not found
return undef;
}
sub UNIVERSAL::AUTOLOAD {
(my $function = $UNIVERSAL::AUTOLOAD) =~ s/.*:://;
my $sub = find_function($function);
print STDERR "Not found!\n" if ($DEBUG && (ref($sub) ne 'CODE'));
goto &$sub if (ref($sub) eq 'CODE');
}
1;
( run in 0.713 second using v1.01-cache-2.11-cpan-d80b1682f3f )