#!/usr/bin/perl use common::sense; use lib './'; package main; my $monitor_plugins = SNMPMonitor->new(); my @plugins = $monitor_plugins->plugins(); print "Plugin: $_ \n" foreach @plugins; my $c = SNMPMonitor::Plugin::Atest->new('1.2.3'); use Data::Dumper; print Dumper $c; print "\n"; print "Name: " . $c->name . "\n";; print "Full Name: " . $c->full_name . "\n"; print "OID: " . $c->plugin_oid . "\n"; #$c->set_oid(); # print "\n"; # print "Name: " . $c->name . "\n";; # print "Full Name: " . $c->full_name . "\n"; # print "OID: " . $c->r_oid . "\n"; print Dumper $monitor_plugins; package SNMPMonitor; use Module::Pluggable require => 1; #instantiate => 'new'; sub new { my $obj_class = shift; my $root_oid = shift; my $class = ref $obj_class || $obj_class; my ($name) = $class =~ /::Plugin::(.*)/; my $self = { name => $name, full_name => $class, root_oid => $root_oid, plugin_oid => '', }; bless $self, $class; for my $datum (keys %{$self}) { no strict "refs"; *$datum = sub { shift; # XXX: ignore calling class/object $self->{$datum} = shift if @_; return $self->{$datum}; }; } eval {$self->set_oid()} if $self->can('set_oid'); return $self; } #sub set_oid { # my $self = shift; # no strict "vars"; # $self->plugin_oid($plugin_oid); #} #### package SNMPMonitor::Plugin::Atest; use common::sense; our @ISA = qw(SNMPMonitor); my $plugin_oid = '1.2.5'; sub set_oid { my $self = shift; $self->plugin_oid($plugin_oid); } 1; __END__