The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Changes 3742
MANIFEST 13
META.json 33
META.yml 33
Makefile.PL 12
bin/snmptrapd-sendtest.pl 15
bin/snmptrapd-simple.pl 1418
lib/Net/SNMPTrapd.pm 10999
t/00-Net-SNMPTrapd.t 011
t/02-pod-coverage.t 09
t/03-test-pod.t 09
t/Net-SNMPTrapd.t 110
test.pl 2424
13 files changed (This is a version diff) 204228
@@ -1,17 +1,39 @@
 Revision history for Perl extension Net::SNMPTrapd.
 
-0.01  Wed Jan 13 13:40:44 2010
-      - original version; created by h2xs 1.23 with options
-            -b 5.6.1 -v 0.01 -XAn Net::SNMPTrapd
+0.13  Mon Aug  4 09:30:00 2014
+      - Top down order for Changes.
+      - Added LICENSE to Makefile.PL.
+      - Cleanup code (remove Exporter).
 
-0.02  Mon Jan 18 16:29:48 2010
-      - Allowed legacy and case insensitive calling of switches.
+0.12  Fri Aug 16 09:30:00 2013
+      - Updated Convert::ASN1 into single encode/decode.
+      - Added NULL varbind.
+      - Updated bin scripts: send has NULL value option, server has dump
 
-0.03  Mon Feb  5 09:29:48 2010
-      - Updated tests to address Activestate auto-building of PPM
-        which threw an error even though one didn't exist and
-        every other version of build - including CPAN Testers
-        had NO issues whatsoever.
+0.11  Mon Feb  4 09:30:00 2013
+      - pack_sockaddr_in / _in6 needed Socket:: prefix - RT# 83021.
+
+0.10  Tue Nov 20 21:30:00 2012
+      - Any Socket will do, fixed inet_ntoa issue with IPv6 in version 1.
+
+0.09  Sun Oct  7 21:30:00 2012
+      - Require Socket 1.87.
+
+0.08  Thu Oct  4 23:59:00 2012
+      - Make IO::Socket::IP optional with failback to IP::Socket::INET
+        with SUPER.
+      - Changed peeraddr(), peerport() accessors to remoteaddr(),
+        remoteport() to remove conflict with IO::Socket::*.
+
+0.07  Tue Sep  4 12:00:00 2012
+      - Timeout on advanced tests with EU::MM prompt().
+
+0.06  Fri Aug 24 12:00:00 2012
+      - Added server() accessor.
+
+0.05  Thu Aug 23 19:00:00 2012
+      - Changed to IO::Socket::IP and enabled IPv6 support.
+      - Updated bin/ scripts.
 
 0.04  Thu Oct 21 12:00:00 2010
       - Based on request user request, implemented parsing and
@@ -29,32 +51,15 @@ Revision history for Perl extension Net::SNMPTrapd.
         debug subroutines directly for ASN.1 decode troubleshooting.
       - More detailed error messages and more code comments.
 
-0.05  Thu Aug 23 19:00:00 2012
-      - Changed to IO::Socket::IP and enabled IPv6 support.
-      - Updated bin/ scripts.
-
-0.06  Fri Aug 24 12:00:00 2012
-      - Added server() accessor.
-
-0.07  Tue Sep  4 12:00:00 2012
-      - Timeout on advanced tests with EU::MM prompt().
-
-0.08  Thu Oct  4 23:59:00 2012
-      - Make IO::Socket::IP optional with failback to IP::Socket::INET
-        with SUPER.
-      - Changed peeraddr(), peerport() accessors to remoteaddr(),
-        remoteport() to remove conflict with IO::Socket::*.
-
-0.09  Sun Oct  7 21:30:00 2012
-      - Require Socket 1.87.
-
-0.10  Tue Nov 20 21:30:00 2012
-      - Any Socket will do, fixed inet_ntoa issue with IPv6 in version 1.
+0.03  Mon Feb  5 09:29:48 2010
+      - Updated tests to address Activestate auto-building of PPM
+        which threw an error even though one didn't exist and
+        every other version of build - including CPAN Testers
+        had NO issues whatsoever.
 
-0.11  Mon Feb  4 09:30:00 2013
-      - pack_sockaddr_in / _in6 needed Socket:: prefix - RT# 83021.
+0.02  Mon Jan 18 16:29:48 2010
+      - Allowed legacy and case insensitive calling of switches.
 
-0.12  Fri Aug 16 09:30:00 2013
-      - Updated Convert::ASN1 into single encode/decode.
-      - Added NULL varbind.
-      - Updated bin scripts: send has NULL value option, server has dump
+0.01  Wed Jan 13 13:40:44 2010
+      - original version; created by h2xs 1.23 with options
+            -b 5.6.1 -v 0.01 -XAn Net::SNMPTrapd
@@ -4,7 +4,9 @@ MANIFEST
 README
 bin/snmptrapd-sendtest.pl
 bin/snmptrapd-simple.pl
-t/Net-SNMPTrapd.t
+t/00-Net-SNMPTrapd.t
+t/02-pod-coverage.t
+t/03-test-pod.t
 test.pl
 lib/Net/SNMPTrapd.pm
 META.yml                                 Module meta-data (added by MakeMaker)
@@ -4,9 +4,9 @@
       "Michael Vincent <vin at vinsworld dot com>"
    ],
    "dynamic_config" : 1,
-   "generated_by" : "ExtUtils::MakeMaker version 6.6302, CPAN::Meta::Converter version 2.120921",
+   "generated_by" : "ExtUtils::MakeMaker version 6.72, CPAN::Meta::Converter version 2.132140",
    "license" : [
-      "unknown"
+      "perl_5"
    ],
    "meta-spec" : {
       "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
@@ -39,5 +39,5 @@
       }
    },
    "release_status" : "stable",
-   "version" : "0.12"
+   "version" : "0.13"
 }
@@ -7,8 +7,8 @@ build_requires:
 configure_requires:
   ExtUtils::MakeMaker: 0
 dynamic_config: 1
-generated_by: 'ExtUtils::MakeMaker version 6.6302, CPAN::Meta::Converter version 2.120921'
-license: unknown
+generated_by: 'ExtUtils::MakeMaker version 6.72, CPAN::Meta::Converter version 2.132140'
+license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
   version: 1.4
@@ -21,4 +21,4 @@ requires:
   Convert::ASN1: 0.22
   Socket: 0
   Test::Simple: 0
-version: 0.12
+version: 0.13
@@ -1,10 +1,11 @@
-use 5.006001;
+use 5.008001;
 use ExtUtils::MakeMaker;
 # See lib/ExtUtils/MakeMaker.pm for details of how to influence
 # the contents of the Makefile that is written.
 WriteMakefile(
     NAME              => 'Net::SNMPTrapd',
     VERSION_FROM      => 'lib/Net/SNMPTrapd.pm', # finds $VERSION
+    ($ExtUtils::MakeMaker::VERSION >= 6.3002) ? ('LICENSE'  => 'perl', ) : (),
     EXE_FILES         => ['bin/snmptrapd-simple.pl',
                           'bin/snmptrapd-sendtest.pl'],
     PREREQ_PM         => {Test::Simple => 0,
@@ -1,10 +1,12 @@
 #! /usr/bin/perl
 
 use strict;
-use Net::SNMP qw(:ALL);
+use warnings
 use Getopt::Long qw(:config no_ignore_case); #bundling
 use Pod::Usage;
 
+use Net::SNMP qw(:ALL);
+
 my %opt;
 my ($opt_help, $opt_man);
 
@@ -134,6 +136,8 @@ for my $host (@ARGV) {
     $session->close()
 }
 
+__END__
+
 =head1 NAME
 
 SNMPTRAPD-SENDTEST - SNMP Trap Tests
@@ -1,10 +1,12 @@
 #!/usr/bin/perl
 
 use strict;
-use Net::SNMPTrapd;
+use warnings;
 use Getopt::Long qw(:config no_ignore_case); #bundling
 use Pod::Usage;
 
+use Net::SNMPTrapd;
+
 my %opt;
 my ($opt_help, $opt_man);
 
@@ -87,23 +89,23 @@ while (1) {
             $trap->dump
         } else {
             $p = sprintf "%s\t%i\t%i\t%s\t%s\t", 
-                             $trap->remoteaddr, 
-                             $trap->remoteport, 
-                             $trap->version, 
-                             $trap->community,
-                             $trap->pdu_type;
+                $trap->remoteaddr, 
+                $trap->remoteport, 
+                $trap->version, 
+                $trap->community,
+                $trap->pdu_type;
             if ($trap->version == 1) {
                 $p .= sprintf "%s\t%s\t%s\t%s\t%s\t", 
-                             $trap->ent_OID, 
-                             $trap->agentaddr, 
-                             $trap->generic_trap, 
-                             $trap->specific_trap, 
-                             $trap->timeticks
+                    $trap->ent_OID, 
+                    $trap->agentaddr, 
+                    $trap->generic_trap, 
+                    $trap->specific_trap, 
+                    $trap->timeticks
             } else {
                 $p .= sprintf "%s\t%s\t%s\t", 
-                             $trap->request_ID, 
-                             $trap->error_status, 
-                             $trap->error_index
+                    $trap->request_ID, 
+                    $trap->error_status, 
+                    $trap->error_index
             }
             for my $varbind (@{$trap->varbinds}) {
                 for (keys(%{$varbind})) {
@@ -137,6 +139,8 @@ while (1) {
     }
 }
 
+__END__
+
 =head1 NAME
 
 SNMPTRAPD-SIMPLE - Simple SNMP Trap Server
@@ -1,29 +1,20 @@
 package Net::SNMPTrapd;
 
 ########################################################
-#
 # AUTHOR = Michael Vincent
 # www.VinsWorld.com
-#
 ########################################################
 
-require 5.005;
-
 use strict;
-use Exporter;
+use warnings;
 use Convert::ASN1;
 use Socket qw(inet_ntoa AF_INET IPPROTO_TCP);
 
 my $AF_INET6 = eval { Socket::AF_INET6() };
 my $NI_NUMERICHOST = eval { Socket::NI_NUMERICHOST() };
 
-our $VERSION     = '0.12';
-our @ISA         = qw(Exporter);
-our @EXPORT      = qw();
-our %EXPORT_TAGS = (
-                    'all' => [qw()]
-                   );
-our @EXPORT_OK   = (@{$EXPORT_TAGS{'all'}});
+our $VERSION = '0.13';
+our @ISA;
 
 my $HAVE_IO_Socket_IP = 0;
 eval "use IO::Socket::IP -register";
@@ -43,8 +34,8 @@ use constant SNMPTRAPD_RFC_SIZE     => 484;   # RFC limit
 use constant SNMPTRAPD_REC_SIZE     => 1472;  # Recommended size
 use constant SNMPTRAPD_MAX_SIZE     => 65467; # Actual limit (65535 - IP/UDP)
 
-our @TRAPTYPES = qw(COLDSTART WARMSTART LINKDOWN LINKUP AUTHFAIL EGPNEIGHBORLOSS ENTERPRISESPECIFIC);
-our @PDUTYPES  = qw(GetRequest GetNextRequest Response SetRequest Trap GetBulkRequest InformRequest SNMPv2-Trap Report);
+my @TRAPTYPES = qw(COLDSTART WARMSTART LINKDOWN LINKUP AUTHFAIL EGPNEIGHBORLOSS ENTERPRISESPECIFIC);
+my @PDUTYPES  = qw(GetRequest GetNextRequest Response SetRequest Trap GetBulkRequest InformRequest SNMPv2-Trap Report);
 our $LASTERROR;
 
 my $asn = Convert::ASN1->new;
@@ -102,7 +93,7 @@ $asn->prepare("
         }
     }
 ");
-our $snmpasn = $asn->find('PDU');
+my $snmpasn = $asn->find('PDU');
 
 ########################################################
 # End Variables
@@ -126,35 +117,35 @@ sub new {
 
     if (@_ == 1) {
         $LASTERROR = "Insufficient number of args - @_";
-        return(undef)
+        return undef
     } else {
         my %cfg = @_;
         for (keys(%cfg)) {
             if (/^-?localport$/i) {
-                $params{'LocalPort'} = $cfg{$_}
+                $params{LocalPort} = $cfg{$_}
             } elsif (/^-?localaddr$/i) {
-                $params{'LocalAddr'} = $cfg{$_}
+                $params{LocalAddr} = $cfg{$_}
             } elsif (/^-?family$/i) {
                  if ($cfg{$_} =~ /^(?:(?:(:?ip)?v?(?:4|6))|${\AF_INET}|$AF_INET6)$/) {
                     if ($cfg{$_} =~ /^(?:(?:(:?ip)?v?4)|${\AF_INET})$/) {
-                        $params{'Family'} = AF_INET
+                        $params{Family} = AF_INET
                     } else {
                         if (!$HAVE_IO_Socket_IP) {
                             $LASTERROR = "IO::Socket::IP required for IPv6";
-                            return(undef)
+                            return undef
                         }
-                        $params{'Family'} = $AF_INET6
+                        $params{Family} = $AF_INET6
                     }
                 } else {
                     $LASTERROR = "Invalid family - $cfg{$_}";
-                    return(undef)
+                    return undef
                 }
             } elsif (/^-?timeout$/i) {
                 if ($cfg{$_} =~ /^\d+$/) {
-                    $params{'Timeout'} = $cfg{$_}
+                    $params{Timeout} = $cfg{$_}
                 } else {
                     $LASTERROR = "Invalid timeout - $cfg{$_}";
-                    return(undef)
+                    return undef
                 }
             }
         }
@@ -167,7 +158,7 @@ sub new {
                      }, $class
     } else {
         $LASTERROR = "Error opening socket for listener: $@";
-        return(undef)
+        return undef
     }
 }
 
@@ -186,7 +177,7 @@ sub get_trap {
     my $datagramsize = SNMPTRAPD_MAX_SIZE;
     if (@_ == 1) {
         $LASTERROR = "Insufficient number of args: @_";
-        return(undef)
+        return undef
     } else {
         my %args = @_;        
         for (keys(%args)) {
@@ -202,22 +193,22 @@ sub get_trap {
                     $datagramsize = SNMPTRAPD_REC_SIZE
                 } else {
                     $LASTERROR = "Not a valid size: $args{$_}";
-                    return(undef)
+                    return undef
                 }
             # -timeout
             } elsif (/^-?timeout$/i) {
                 if ($args{$_} =~ /^\d+$/) {
-                    $trap->{'Timeout'} = $args{$_}
+                    $trap->{Timeout} = $args{$_}
                 } else {
                     $LASTERROR = "Invalid timeout - $args{$_}";
-                    return(undef)
+                    return undef
                 }
             }
         }
     }
 
-    my $Timeout = $trap->{'Timeout'};
-    my $udpserver = $self->{'_UDPSERVER_'};
+    my $Timeout = $trap->{Timeout};
+    my $udpserver = $self->{_UDPSERVER_};
     my $datagram;
 
     if ($Timeout != 0) {
@@ -235,15 +226,15 @@ sub get_trap {
     # read the message
     if ($udpserver->recv($datagram, $datagramsize)) {
 
-        $trap->{'_TRAP_'}{'PeerPort'} = $udpserver->SUPER::peerport;
-        $trap->{'_TRAP_'}{'PeerAddr'} = $udpserver->SUPER::peerhost;
-        $trap->{'_TRAP_'}{'datagram'} = $datagram;
+        $trap->{_TRAP_}{PeerPort} = $udpserver->SUPER::peerport;
+        $trap->{_TRAP_}{PeerAddr} = $udpserver->SUPER::peerhost;
+        $trap->{_TRAP_}{datagram} = $datagram;
 
         return bless $trap, $class
     }
 
     $LASTERROR = sprintf "Socket RECV error: $!";
-    return(undef)
+    return undef
 }
 
 sub process_trap {
@@ -255,13 +246,13 @@ sub process_trap {
     if (($self eq $class) && ($class eq __PACKAGE__)) {
         my %th;
         $self = \%th;
-        ($self->{'_TRAP_'}{'datagram'}) = @_
+        ($self->{_TRAP_}{datagram}) = @_
     }
     # Net::SNMPTrapd::process_trap($data)
     if ($class ne __PACKAGE__) {
         my %th;
         $self = \%th;
-        ($self->{'_TRAP_'}{'datagram'}) = $class;
+        ($self->{_TRAP_}{datagram}) = $class;
         $class = __PACKAGE__
     }
 
@@ -272,7 +263,7 @@ sub process_trap {
         for (keys(%args)) {
             # -datagram
             if ((/^-?data(?:gram)?$/i) || (/^-?pdu$/i)) {
-                $self->{'_TRAP_'}{'datagram'} = $args{$_}
+                $self->{_TRAP_}{datagram} = $args{$_}
             # -noresponse
             } elsif (/^-?noresponse$/i) {
                 if (($args{$_} =~ /^\d+$/) && ($args{$_} > 0)) {
@@ -283,179 +274,179 @@ sub process_trap {
     }
 
     my $trap;
-    if (!defined($trap = $snmpasn->decode($self->{'_TRAP_'}{'datagram'}))) {
+    if (!defined($trap = $snmpasn->decode($self->{_TRAP_}{datagram}))) {
         $LASTERROR = sprintf "Error decoding PDU - %s", (defined($snmpasn->error) ? $snmpasn->error : "Unknown Convert::ASN1->decode() error.  Consider $class dump()");
-        return(undef)
+        return undef
     }
     #DEBUG: use Data::Dumper; print Dumper \$trap;
 
     # Only understand SNMPv1 (0) and v2c (1)
-    if ($trap->{'version'} > 1) {
-        $LASTERROR = sprintf "Unrecognized SNMP version - %i", $trap->{'version'};
-        return(undef)
+    if ($trap->{version} > 1) {
+        $LASTERROR = sprintf "Unrecognized SNMP version - %i", $trap->{version};
+        return undef
     }
 
     # set PDU Type for later use
-    my $pdutype = sprintf "%s", keys(%{$trap->{'pdu_type'}});
+    my $pdutype = sprintf "%s", keys(%{$trap->{pdu_type}});
 
     ### Assemble decoded trap object
     # Common
-    $self->{'_TRAP_'}{'version'} = $trap->{'version'};
-    $self->{'_TRAP_'}{'community'} = $trap->{'community'};
+    $self->{_TRAP_}{version} = $trap->{version};
+    $self->{_TRAP_}{community} = $trap->{community};
     if ($pdutype eq 'trap') {
-        $self->{'_TRAP_'}{'pdu_type'} = 4
+        $self->{_TRAP_}{pdu_type} = 4
     
     } elsif ($pdutype eq 'inform_request') {
-        $self->{'_TRAP_'}{'pdu_type'} = 6;
+        $self->{_TRAP_}{pdu_type} = 6;
 
         # send response for InformRequest
         if ($RESPONSE) {
-            if ((my $r = &_InformRequest_Response(\$self, $trap, $pdutype)) ne 'OK') {
+            if ((my $r = _InformRequest_Response(\$self, $trap, $pdutype)) ne 'OK') {
                 $LASTERROR = sprintf "Error sending InformRequest Response - %s", $r;
-                return(undef)
+                return undef
             }
         }
 
     } elsif ($pdutype eq 'snmpv2_trap') { 
-        $self->{'_TRAP_'}{'pdu_type'} = 7
+        $self->{_TRAP_}{pdu_type} = 7
     }
 
     # v1
-    if ($trap->{'version'} == 0) {
-        $self->{'_TRAP_'}{'ent_oid'}       =          $trap->{'pdu_type'}->{$pdutype}->{'ent_oid'};
-        $self->{'_TRAP_'}{'agent_addr'}    = inetNtoa($trap->{'pdu_type'}->{$pdutype}->{'agent_addr'});
-        $self->{'_TRAP_'}{'generic_trap'}  =          $trap->{'pdu_type'}->{$pdutype}->{'generic_trap'};
-        $self->{'_TRAP_'}{'specific_trap'} =          $trap->{'pdu_type'}->{$pdutype}->{'specific_trap'};
-        $self->{'_TRAP_'}{'timeticks'}     =          $trap->{'pdu_type'}->{$pdutype}->{'timeticks'};
+    if ($trap->{version} == 0) {
+        $self->{_TRAP_}{ent_oid}       =           $trap->{pdu_type}->{$pdutype}->{ent_oid};
+        $self->{_TRAP_}{agent_addr}    = _inetNtoa($trap->{pdu_type}->{$pdutype}->{agent_addr});
+        $self->{_TRAP_}{generic_trap}  =           $trap->{pdu_type}->{$pdutype}->{generic_trap};
+        $self->{_TRAP_}{specific_trap} =           $trap->{pdu_type}->{$pdutype}->{specific_trap};
+        $self->{_TRAP_}{timeticks}     =           $trap->{pdu_type}->{$pdutype}->{timeticks};
 
     # v2c
-    } elsif ($trap->{'version'} == 1) {
-        $self->{'_TRAP_'}{'request_id'}   = $trap->{'pdu_type'}->{$pdutype}->{'request_id'};
-        $self->{'_TRAP_'}{'error_status'} = $trap->{'pdu_type'}->{$pdutype}->{'error_status'};
-        $self->{'_TRAP_'}{'error_index'}  = $trap->{'pdu_type'}->{$pdutype}->{'error_index'};
+    } elsif ($trap->{version} == 1) {
+        $self->{_TRAP_}{request_id}   = $trap->{pdu_type}->{$pdutype}->{request_id};
+        $self->{_TRAP_}{error_status} = $trap->{pdu_type}->{$pdutype}->{error_status};
+        $self->{_TRAP_}{error_index}  = $trap->{pdu_type}->{$pdutype}->{error_index};
     }
 
     # varbinds
     my @varbinds;
-    for my $i (0..$#{$trap->{'pdu_type'}->{$pdutype}->{'varbindlist'}}) {
+    for my $i (0..$#{$trap->{pdu_type}->{$pdutype}->{varbindlist}}) {
         my %oidval;
-        for (keys(%{$trap->{'pdu_type'}->{$pdutype}->{'varbindlist'}[$i]->{'value'}})) {
+        for (keys(%{$trap->{pdu_type}->{$pdutype}->{varbindlist}[$i]->{value}})) {
             # defined
-            if (defined($trap->{'pdu_type'}->{$pdutype}->{'varbindlist'}[$i]->{'value'}{$_})) {
+            if (defined($trap->{pdu_type}->{$pdutype}->{varbindlist}[$i]->{value}{$_})) {
                 # special cases:  IP address, null
                 if ($_ eq 'ipaddr') {
-                    $oidval{$trap->{'pdu_type'}->{$pdutype}->{'varbindlist'}[$i]->{'oid'}} = inetNtoa($trap->{'pdu_type'}->{$pdutype}->{'varbindlist'}[$i]->{'value'}{$_})
+                    $oidval{$trap->{pdu_type}->{$pdutype}->{varbindlist}[$i]->{oid}} = _inetNtoa($trap->{pdu_type}->{$pdutype}->{varbindlist}[$i]->{value}{$_})
                 } elsif ($_ eq 'null') {
-                    $oidval{$trap->{'pdu_type'}->{$pdutype}->{'varbindlist'}[$i]->{'oid'}} = '(NULL)'
+                    $oidval{$trap->{pdu_type}->{$pdutype}->{varbindlist}[$i]->{oid}} = '(NULL)'
                 # no special case:  just assign it
                 } else {
-                    $oidval{$trap->{'pdu_type'}->{$pdutype}->{'varbindlist'}[$i]->{'oid'}} =          $trap->{'pdu_type'}->{$pdutype}->{'varbindlist'}[$i]->{'value'}{$_}
+                    $oidval{$trap->{pdu_type}->{$pdutype}->{varbindlist}[$i]->{oid}} =           $trap->{pdu_type}->{$pdutype}->{varbindlist}[$i]->{value}{$_}
                 }
             # not defined - ""
             } else {
-                $oidval{$trap->{'pdu_type'}->{$pdutype}->{'varbindlist'}[$i]->{'oid'}} = ""
+                $oidval{$trap->{pdu_type}->{$pdutype}->{varbindlist}[$i]->{oid}} = ""
             }
         }
         push @varbinds, \%oidval
     }
-    $self->{'_TRAP_'}{'varbinds'} = \@varbinds;
+    $self->{_TRAP_}{varbinds} = \@varbinds;
 
     return bless $self, $class
 }
 
 sub server {
     my $self = shift;
-    return $self->{'_UDPSERVER_'}
+    return $self->{_UDPSERVER_}
 }
 
 sub datagram {
     my ($self, $arg) = @_;
 
     if (defined($arg) && ($arg >= 1)) {
-        return unpack ('H*', $self->{'_TRAP_'}{'datagram'})
+        return unpack ('H*', $self->{_TRAP_}{datagram})
     } else {
-        return $self->{'_TRAP_'}{'datagram'}
+        return $self->{_TRAP_}{datagram}
     }
 }
 
 sub remoteaddr {
     my $self = shift;
-    return $self->{'_TRAP_'}{'PeerAddr'}
+    return $self->{_TRAP_}{PeerAddr}
 }
 
 sub remoteport {
     my $self = shift;
-    return $self->{'_TRAP_'}{'PeerPort'}
+    return $self->{_TRAP_}{PeerPort}
 }
 
 sub version {
     my $self = shift;
-    return $self->{'_TRAP_'}{'version'} + 1
+    return $self->{_TRAP_}{version} + 1
 }
 
 sub community {
     my $self = shift;
-    return $self->{'_TRAP_'}{'community'}
+    return $self->{_TRAP_}{community}
 }
 
 sub pdu_type {
     my ($self, $arg) = @_;
 
     if (defined($arg) && ($arg >= 1)) {
-        return $self->{'_TRAP_'}{'pdu_type'}
+        return $self->{_TRAP_}{pdu_type}
     } else {
-        return $PDUTYPES[$self->{'_TRAP_'}{'pdu_type'}]
+        return $PDUTYPES[$self->{_TRAP_}{pdu_type}]
     }
 }
 
 sub ent_OID {
     my $self = shift;
-    return $self->{'_TRAP_'}{'ent_oid'}
+    return $self->{_TRAP_}{ent_oid}
 }
 
 sub agentaddr {
     my $self = shift;
-    return $self->{'_TRAP_'}{'agent_addr'}
+    return $self->{_TRAP_}{agent_addr}
 }
 
 sub generic_trap {
     my ($self, $arg) = @_;
 
     if (defined($arg) && ($arg >= 1)) {
-        return $self->{'_TRAP_'}{'generic_trap'}
+        return $self->{_TRAP_}{generic_trap}
     } else {
-        return $TRAPTYPES[$self->{'_TRAP_'}{'generic_trap'}]
+        return $TRAPTYPES[$self->{_TRAP_}{generic_trap}]
     }
 }
 
 sub specific_trap {
     my $self = shift;
-    return $self->{'_TRAP_'}{'specific_trap'}
+    return $self->{_TRAP_}{specific_trap}
 }
 
 sub timeticks {
     my $self = shift;
-    return $self->{'_TRAP_'}{'timeticks'}
+    return $self->{_TRAP_}{timeticks}
 }
 
 sub request_ID {
     my $self = shift;
-    return $self->{'_TRAP_'}{'request_id'}
+    return $self->{_TRAP_}{request_id}
 }
 
 sub error_status {
     my $self = shift;
-    return $self->{'_TRAP_'}{'error_status'}
+    return $self->{_TRAP_}{error_status}
 }
 
 sub error_index {
     my $self = shift;
-    return $self->{'_TRAP_'}{'error_index'}
+    return $self->{_TRAP_}{error_index}
 }
 
 sub varbinds {
     my $self = shift;
-    return $self->{'_TRAP_'}{'varbinds'}
+    return $self->{_TRAP_}{varbinds}
 }
 
 sub error {
@@ -471,22 +462,22 @@ sub dump {
     if (($self eq $class) && ($class eq __PACKAGE__)) {
         my %th;
         $self = \%th;
-        ($self->{'_TRAP_'}{'datagram'}) = @_
+        ($self->{_TRAP_}{datagram}) = @_
     }
     # Net::SNMPTrapd::dump($datagram)
     if ($class ne __PACKAGE__) {
         my %th;
         $self = \%th;
-        ($self->{'_TRAP_'}{'datagram'}) = $class;
+        ($self->{_TRAP_}{datagram}) = $class;
         $class = __PACKAGE__
     }
 
-    if (defined($self->{'_TRAP_'}{'datagram'})) {
-        Convert::ASN1::asn_dump($self->{'_TRAP_'}{'datagram'});
-        Convert::ASN1::asn_hexdump($self->{'_TRAP_'}{'datagram'});
+    if (defined($self->{_TRAP_}{datagram})) {
+        Convert::ASN1::asn_dump($self->{_TRAP_}{datagram});
+        Convert::ASN1::asn_hexdump($self->{_TRAP_}{datagram});
     } else {
         $LASTERROR = "Missing datagram to dump";
-        return(undef)
+        return undef
     }
 
     return 1
@@ -506,40 +497,39 @@ sub _InformRequest_Response {
     my $class = ref($$self) || $$self;
 
     # Change from request to response
-    $trap->{'pdu_type'}{'response'} = delete $trap->{'pdu_type'}{'inform_request'};
+    $trap->{pdu_type}{response} = delete $trap->{pdu_type}{inform_request};
 
     my $buffer = $snmpasn->encode($trap);
     if (!defined($buffer)) {
         return $snmpasn->error
     }
     #DEBUG print "BUFFER = $buffer\n";
-
-    if ($$self->{'_TRAP_'}->{'PeerAddr'} eq "") {
+    if (!defined($$self->{_TRAP_}->{PeerAddr}) || ($$self->{_TRAP_}->{PeerAddr} eq "")) {
         return "Peer Addr undefined"
     }
-    if ($$self->{'_TRAP_'}->{'PeerPort'} == 0) {
+    if (!defined($$self->{_TRAP_}->{PeerPort}) || ($$self->{_TRAP_}->{PeerPort} == 0)) {
         return "Peer Port undefined"
     }
 
     my $socket = $class->SUPER::new(
-                                     Proto     => "udp",
-                                     PeerAddr  => $$self->{'_TRAP_'}->{'PeerAddr'},
-                                     PeerPort  => $$self->{'_TRAP_'}->{'PeerPort'},
-                                     # LocalPort should be set, but creates error.
-                                     # Tried setting ReusePort on initial server,
-                                     # but not implemented on Windows.  What to do?
-                                     #LocalPort => SNMPTRAPD_DEFAULT_PORT,
-                                     Family    => $$self->{'Family'}
-                                    ) || return "Can't create Response socket";
+        Proto     => "udp",
+        PeerAddr  => $$self->{_TRAP_}->{PeerAddr},
+        PeerPort  => $$self->{_TRAP_}->{PeerPort},
+        # LocalPort should be set, but creates error.
+        # Tried setting ReusePort on initial server,
+        # but not implemented on Windows.  What to do?
+        #LocalPort => SNMPTRAPD_DEFAULT_PORT,
+        Family    => $$self->{Family}
+    ) || return "Can't create Response socket";
     $socket->send($buffer);
     close $socket;
 
     # Change back to request from response
-    $trap->{'pdu_type'}{'inform_request'} = delete $trap->{'pdu_type'}{'response'};
+    $trap->{pdu_type}{inform_request} = delete $trap->{pdu_type}{response};
     return ("OK")
 }
 
-sub inetNtoa {
+sub _inetNtoa {
     my ($addr) = @_;
 
     if ($Socket::VERSION >= 1.94) {
@@ -0,0 +1,11 @@
+#!/usr/bin/perl
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl Net-SNMPTrapd.t'
+
+use strict;
+use Test::Simple tests => 1;
+
+use Net::SNMPTrapd;
+ok(1, "Loading Module"); # If we made it this far, we're ok.
+
+#########################
@@ -0,0 +1,9 @@
+eval "use Test::Pod::Coverage";
+if ($@) {
+    use Test;
+    plan(tests => 1);
+    skip("Test::Pod::Coverage required for testing");
+}
+else {
+    all_pod_coverage_ok();
+}
@@ -0,0 +1,9 @@
+eval "use Test::Pod 1.00";
+if ($@) {
+    use Test;
+    plan(tests => 1);
+    skip("Test::Pod 1.00 required for testing");
+}
+else {
+    all_pod_files_ok();
+}
@@ -1,11 +0,0 @@
-#!/usr/bin/perl
-# Before `make install' is performed this script should be runnable with
-# `make test'. After `make install' it should work as `perl Net-SNMPTrapd.t'
-
-use strict;
-use Test::Simple tests => 1;
-
-use Net::SNMPTrapd;
-ok(1, "Loading Module"); # If we made it this far, we're ok.
-
-#########################
@@ -92,11 +92,11 @@ sub test4 {
 
         # SNMPv1 Trap
         my ($session, $error) = Net::SNMP->session(
-                                                   -hostname  => 'localhost',
-                                                   -version   => 1,
-                                                   -community => 'public',
-                                                   -port      => 162
-                                                  );
+            -hostname  => 'localhost',
+            -version   => 1,
+            -community => 'public',
+            -port      => 162
+        );
 
         if (!defined($session)) {
            printf "Error: Starting SNMP session (v1 trap) - %s\n", $error;
@@ -123,11 +123,11 @@ sub test4 {
 
         # SNMPv2 Trap
         ($session, $error) = Net::SNMP->session(
-                                                   -hostname  => 'localhost',
-                                                   -version   => 2,
-                                                   -community => 'public',
-                                                   -port      => 162
-                                                  );
+            -hostname  => 'localhost',
+            -version   => 2,
+            -community => 'public',
+            -port      => 162
+        );
 
         if (!defined($session)) {
            printf "Error: Starting SNMP session (v2c trap) - %s\n", $error;
@@ -153,11 +153,11 @@ sub test4 {
         # SNMPv2 InformRequest
         # This will keep sending until a Response is successfully sent from the Server or until timeout
         ($session, $error) = Net::SNMP->session(
-                                                   -hostname  => 'localhost',
-                                                   -version   => 2,
-                                                   -community => 'public',
-                                                   -port      => 162
-                                                  );
+            -hostname  => 'localhost',
+            -version   => 2,
+            -community => 'public',
+            -port      => 162
+        );
 
         if (!defined($session)) {
            printf "Error: Starting SNMP session (v2c InformRequest) - %s\n", $error;
@@ -277,10 +277,10 @@ sub test5 {
 
     use IO::Socket::INET;
     my $snmptrapd = IO::Socket::INET->new(
-                                          'Proto'     => 'udp',
-                                          'LocalPort' => 162,
-                                          'Timeout'   => 10
-                                         );
+        'Proto'     => 'udp',
+        'LocalPort' => 162,
+        'Timeout'   => 10
+    );
 
     if (!defined($snmptrapd)) {
         print "Error: creating socket\n";
@@ -300,11 +300,11 @@ sub test5 {
         # SNMPv2 InformRequest
         # This will keep sending until a Response is successfully sent from the Server or until timeout
         my ($session, $error) = Net::SNMP->session(
-                                                   -hostname  => 'localhost',
-                                                   -version   => 2,
-                                                   -community => 'public',
-                                                   -port      => 162
-                                                  );
+            -hostname  => 'localhost',
+            -version   => 2,
+            -community => 'public',
+            -port      => 162
+        );
 
         if (!defined($session)) {
            printf "Error: Starting SNMP session (v2c InformRequest) - %s\n", $error;