#Starts all the addon modules sub start { #Get a list of modules that we have loaded my $modules = load_modules( "PMBot::Listener", "PMBot::Processor" ); #print Dumper($modules); #Start them foreach my $category ( values %$modules ) { foreach my $module (@$category) { $module->start(); } } } #Dynamic module loader for listeners sub load_modules { my @modules_to_load = @_; my %modules; my @module_paths; #print Dumper(@modules_to_load); #Construct a full path to the .pm file(s) #Also populate the hash with data regarding the modules foreach my $inc_path (@INC) { foreach my $module_name (@modules_to_load) { my $path = $module_name; $path =~ s/::/\//; my $full_path = $inc_path . "/" . $path . "/"; if ( -e $full_path ) { foreach my $module ( glob "$full_path*.pm" ) { require $module; my $full_module_name = $module_name . "::" . ( fileparse( $module, ".pm" ) ); push @{ $modules{$module_name} }, ($full_module_name); } } } } return \%modules; }