---
name: "SNMP::Info::MRO"
section: "3pm"
platform: "linux"
package: "libsnmp-info-perl"
version: "3.972002-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/SNMP::Info::MRO"
---

# SNMP::Info::MRO(3pm)

Method resolution introspection for SNMP::Info

## NAME

SNMP::Info::MRO - Method resolution introspection for SNMP::Info

## SYNOPSIS

```
 use SNMP::Info::MRO;
 use Data::Printer;
 # SNMP::Info::MRO::print_* functions
 SNMP::Info::MRO::print_superclasses ('SNMP::Info::Layer3::Juniper');
 # print output using Data::Printer for other functions
 my $buff = SNMP::Info::MRO::all_methods('SNMP::Info::Layer3::Juniper');
 p $buff;
```

## 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.
```
