Provided by: libsnmp-info-perl_3.39-1_all bug

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.