Provided by: libsnmp-info-perl_3.39-1_all
NAME
SNMP::Info::MRO - Method resolution introspection for SNMP::Info
SYNOPSIS
use SNMP::Info::MRO; use Data::Printer; p SNMP::Info::MRO::all_methods('SNMP::Info::Layer3::Juniper');
DESCRIPTION
This is a set of helpers to show where a given method in SNMP::Info has been implemented, and which implementation is being used at runtime. The following distributions are required to run this code: • PPI • Class::ISA • Module::Info • Module::Load
FUNCTIONS
None of the functions are exported. For all helper functions, you can pass either the name of a Perl module, or an object instance of SNMP::Info. all_methods( $module ) Returns the location of methods defined in $module and all its ancestor classes (superclasses), either as Perl subroutines or via %GLOBALS or %FUNCS configuration. The data structure looks like: { method_name => { globals => [ [ Package::Name => 'mib_leaf.0' ], [ Other::Package::Name => '1.3.6.1.4.1.9.2.1.58.0' ], ], }, other_method_name => [ subs => [ 'Package::Name', ], funcs => [ [ Package::Name => 'mib_leaf_name' ], ], ], } It should be noted that the order of method resolution in SNMP::Info is to first look for a defined subroutine (this is done by Perl), then the AUTOLOAD sequence will search for a definition in %GLOBALS followed by %FUNCS. The defining class or module at runtime is always the first entry in the list, if it exists: $data->{method_name}->{subs}->[0] if exists $data->{method_name}->{subs}; subroutines( $module ) Returns the set of subroutines defined in $module and all its ancestor classes (superclasses). The data structure looks like: { method_name => [ 'Package::Name', 'Other::Package::Name', ], other_method_name => [ 'Package::Name', ], } Should a subroutine have been defined more than once, the defining classes are listed in reverse order, such that the definition used at runtime is always: $data->{method_name}->[0]; globals( $module || $object ) Returns a data structure showing how SNMP::Info will resolve MIB Leaf Nodes configured through the %GLOBALS hashes in $module. The data structure looks like: { method_name => [ [ Package::Name => 'mib_leaf_name' ], [ Other::Package::Name => '1.3.6.1.4.1.9.2.1.58.0' ], ], other_method_name => [ [ Package::Name => 'mib_leaf.0' ], ], } Where a method has been defined in different packages, then they are listed in reverse order, such that the mapping used by SNMP::Info is always: $data->{method_name}->[0]; funcs( $module || $object ) Returns a data structure showing how SNMP::Info will resolve MIB Tables configured through the %FUNCS hashes in $module. See "GLOBALS" in SNMP::Info::Layer3 for further detail. munge( $module || $object ) Returns a data structure showing the subroutines used for munging returned values for any method defined in %FUNCS or %GLOBALS. The data structure looks like: { method_name => [ [ Package::Name => '&subroutine' ], [ Other::Package::Name => '&Other::Package::subroutine' ], ], other_method_name => [ [ Package::Name => '&subroutine' ], ], } Where a mapping has been defined in different packages, then they are listed in reverse order, such that the munge subroutine used by SNMP::Info is always: $data->{method_name}->[0]; file( $module ) Returns the filename from which Perl will load the given module. superclasses( $class || $object ) Returns the list (in order) of the names of classes Perl will search to find methods for this SNMP::Info class or object instance. Note this requires the <Class:ISA> distribution to be installed. print_globals( $module || $object ) Pretty print the output of "globals()". print_funcs( $module || $object ) Pretty print the output of "funcs()". print_munge( $module || $object ) Pretty print the output of "munge()". print_superclasses( $class || $object ) Pretty print the output of "superclasses()".
AUTHOR
Oliver Gorwits <oliver@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2014 by The SNMP::Info Project. # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the University of California, Santa Cruz nor the # names of its contributors may be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE.