foreach (@plugin_list) { require $_ or warn "Plugin $_ failed to load"; } #### # Initialization: foreach (@plugins) { $_->init if UNIVERSAL::can($_, 'init'); } #### #!/usr/bin/perl -w use strict; package Foo; sub new { bless {}, shift; } my $bar = sub { return 'Bar!'; }; sub can { my ($self, $method) = @_; return $bar if $method eq 'bar'; return $self->SUPER::can( $method ); } package main; my $foo = Foo->new(); if (UNIVERSAL::can( $foo, 'bar' )) { print "UNIVERSAL thinks Foo can bar\n"; } if (my $bar = $foo->can( 'bar' )) { print "Foo can actually ", $foo->$bar(), "\n"; } #### # Initialization: foreach (@plugins) { eval { return unless $_->can( 'init' ); return $_->init(); } }