NAME
SNMP::Info::MRO - Method resolution introspection for SNMP::Info
SYNOPSIS
use SNMP::Info::MRO;use Data::Printer;# SNMP::Info::MRO::print_* functionsSNMP::Info::MRO::print_superclasses ('SNMP::Info::Layer3::Juniper');# print output using Data::Printer for other functionsmy $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
$moduleand all its ancestor classes (superclasses), either as Perl subroutines or via%GLOBALSor%FUNCSconfiguration. 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
%GLOBALSfollowed 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
$moduleand 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
%GLOBALShashes 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
%FUNCShashes 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
%FUNCSor%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 <[email protected]>
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.