This patch is derived from the perl-5.10.1 tarball as released on the CPAN. diff -urN perl-5.10.0.orig/lib/Devel/InnerPackage.pm perl-5.10.0/lib/Devel/InnerPackage.pm --- perl-5.10.0.orig/lib/Devel/InnerPackage.pm 2007-12-18 02:47:07.000000000 -0800 +++ perl-5.10.0/lib/Devel/InnerPackage.pm 2009-08-31 19:47:24.444773931 -0700 @@ -17,7 +17,7 @@ =head1 SYNOPSIS use Foo::Bar; - use Devel::innerPackage qw(list_packages); + use Devel::InnerPackage qw(list_packages); my @inner_packages = list_packages('Foo::Bar'); @@ -75,7 +75,7 @@ !__PACKAGE__->_loaded($pack.$cand); # or @children; push @packs, @children; } - return grep {$_ !~ /::::ISA::CACHE/} @packs; + return grep {$_ !~ /::(::ISA::CACHE|SUPER)/} @packs; } ### XXX this is an inlining of the Class-Inspector->loaded() diff -urN perl-5.10.0.orig/lib/Module/Pluggable/Object.pm perl-5.10.0/lib/Module/Pluggable/Object.pm --- perl-5.10.0.orig/lib/Module/Pluggable/Object.pm 2007-12-18 02:47:07.000000000 -0800 +++ perl-5.10.0/lib/Module/Pluggable/Object.pm 2009-08-31 19:47:24.446771196 -0700 @@ -6,10 +6,9 @@ use File::Spec::Functions qw(splitdir catdir curdir catfile abs2rel); use Carp qw(croak carp); use Devel::InnerPackage; -use Data::Dumper; use vars qw($VERSION); -$VERSION = '3.6'; +$VERSION = '3.9'; sub new { @@ -20,6 +19,10 @@ } +### Eugggh, this code smells +### This is what happens when you keep adding patches +### *sigh* + sub plugins { my $self = shift; @@ -30,14 +33,14 @@ my $filename = $self->{'filename'}; my $pkg = $self->{'package'}; + # Get the exception params instantiated + $self->_setup_exceptions; + # automatically turn a scalar search path or namespace into a arrayref for (qw(search_path search_dirs)) { $self->{$_} = [ $self->{$_} ] if exists $self->{$_} && !ref($self->{$_}); } - - - # default search path is '::::Plugin' $self->{'search_path'} = ["${pkg}::Plugin"] unless $self->{'search_path'}; @@ -46,13 +49,14 @@ # check to see if we're running under test - my @SEARCHDIR = exists $INC{"blib.pm"} && $filename =~ m!(^|/)blib/! ? grep {/blib/} @INC : @INC; + my @SEARCHDIR = exists $INC{"blib.pm"} && defined $filename && $filename =~ m!(^|/)blib/! ? grep {/blib/} @INC : @INC; # add any search_dir params unshift @SEARCHDIR, @{$self->{'search_dirs'}} if defined $self->{'search_dirs'}; my @plugins = $self->search_directories(@SEARCHDIR); + push(@plugins, $self->handle_innerpackages($_)) for @{$self->{'search_path'}}; # push @plugins, map { print STDERR "$_\n"; $_->require } list_packages($_) for (@{$self->{'search_path'}}); @@ -60,43 +64,12 @@ return () unless @plugins; - # exceptions - my %only; - my %except; - my $only; - my $except; - - if (defined $self->{'only'}) { - if (ref($self->{'only'}) eq 'ARRAY') { - %only = map { $_ => 1 } @{$self->{'only'}}; - } elsif (ref($self->{'only'}) eq 'Regexp') { - $only = $self->{'only'} - } elsif (ref($self->{'only'}) eq '') { - $only{$self->{'only'}} = 1; - } - } - - - if (defined $self->{'except'}) { - if (ref($self->{'except'}) eq 'ARRAY') { - %except = map { $_ => 1 } @{$self->{'except'}}; - } elsif (ref($self->{'except'}) eq 'Regexp') { - $except = $self->{'except'} - } elsif (ref($self->{'except'}) eq '') { - $except{$self->{'except'}} = 1; - } - } - # remove duplicates # probably not necessary but hey ho my %plugins; for(@plugins) { - next if (keys %only && !$only{$_} ); - next unless (!defined $only || m!$only! ); - - next if (keys %except && $except{$_} ); - next if (defined $except && m!$except! ); + next unless $self->_is_legit($_); $plugins{$_} = 1; } @@ -112,6 +85,58 @@ } +sub _setup_exceptions { + my $self = shift; + + my %only; + my %except; + my $only; + my $except; + + if (defined $self->{'only'}) { + if (ref($self->{'only'}) eq 'ARRAY') { + %only = map { $_ => 1 } @{$self->{'only'}}; + } elsif (ref($self->{'only'}) eq 'Regexp') { + $only = $self->{'only'} + } elsif (ref($self->{'only'}) eq '') { + $only{$self->{'only'}} = 1; + } + } + + + if (defined $self->{'except'}) { + if (ref($self->{'except'}) eq 'ARRAY') { + %except = map { $_ => 1 } @{$self->{'except'}}; + } elsif (ref($self->{'except'}) eq 'Regexp') { + $except = $self->{'except'} + } elsif (ref($self->{'except'}) eq '') { + $except{$self->{'except'}} = 1; + } + } + $self->{_exceptions}->{only_hash} = \%only; + $self->{_exceptions}->{only} = $only; + $self->{_exceptions}->{except_hash} = \%except; + $self->{_exceptions}->{except} = $except; + +} + +sub _is_legit { + my $self = shift; + my $plugin = shift; + my %only = %{$self->{_exceptions}->{only_hash}||{}}; + my %except = %{$self->{_exceptions}->{except_hash}||{}}; + my $only = $self->{_exceptions}->{only}; + my $except = $self->{_exceptions}->{except}; + + return 0 if (keys %only && !$only{$plugin} ); + return 0 unless (!defined $only || $plugin =~ m!$only! ); + + return 0 if (keys %except && $except{$plugin} ); + return 0 if (defined $except && $plugin =~ m!$except! ); + + return 1; +} + sub search_directories { my $self = shift; my @SEARCHDIR = @_; @@ -121,7 +146,6 @@ foreach my $dir (@SEARCHDIR) { push @plugins, $self->search_paths($dir); } - return @plugins; } @@ -151,6 +175,8 @@ # parse the file to get the name my ($name, $directory, $suffix) = fileparse($file, $file_regex); + next if (!$self->{include_editor_junk} && $self->_is_editor_junk($name)); + $directory = abs2rel($directory, $sp); # If we have a mixed-case package name, assume case has been preserved @@ -203,17 +229,34 @@ # now add stuff that may have been in package # NOTE we should probably use all the stuff we've been given already # but then we can't unload it :( - push @plugins, $self->handle_innerpackages($searchpath) unless (exists $self->{inner} && !$self->{inner}); + push @plugins, $self->handle_innerpackages($searchpath); } # foreach $searchpath return @plugins; } +sub _is_editor_junk { + my $self = shift; + my $name = shift; + + # Emacs (and other Unix-y editors) leave temp files ending in a + # tilde as a backup. + return 1 if $name =~ /~$/; + # Emacs makes these files while a buffer is edited but not yet + # saved. + return 1 if $name =~ /^\.#/; + # Vim can leave these files behind if it crashes. + return 1 if $name =~ /\.sw[po]$/; + + return 0; +} + sub handle_finding_plugin { my $self = shift; my $plugin = shift; return unless (defined $self->{'instantiate'} || $self->{'require'}); + return unless $self->_is_legit($plugin); $self->_require($plugin); } @@ -245,10 +288,11 @@ sub handle_innerpackages { my $self = shift; + return () if (exists $self->{inner} && !$self->{inner}); + my $path = shift; my @plugins; - foreach my $plugin (Devel::InnerPackage::list_packages($path)) { my $err = $self->handle_finding_plugin($plugin); #next if $err; @@ -299,6 +343,14 @@ Optionally it instantiates those classes for you. +This object is wrapped by C. If you want to do something +odd or add non-general special features you're probably best to wrap this +and produce your own subclass. + +=head1 OPTIONS + +See the C docs. + =head1 AUTHOR Simon Wistow diff -urN perl-5.10.0.orig/lib/Module/Pluggable.pm perl-5.10.0/lib/Module/Pluggable.pm --- perl-5.10.0.orig/lib/Module/Pluggable.pm 2007-12-18 02:47:07.000000000 -0800 +++ perl-5.10.0/lib/Module/Pluggable.pm 2009-08-31 19:47:24.448771465 -0700 @@ -9,7 +9,7 @@ # Peter Gibbons: I wouldn't say I've been missing it, Bob! -$VERSION = '3.6'; +$VERSION = '3.9'; sub import { my $class = shift; @@ -60,8 +60,9 @@ no strict 'refs'; - no warnings 'redefine'; - *{"$package\::$sub"} = $subroutine; + no warnings qw(redefine prototype); + + *{"$package\::$sub"} = $subroutine; *{"$package\::search_path"} = $searchsub; *{"$package\::only"} = $onlysub; *{"$package\::except"} = $exceptsub; @@ -297,6 +298,14 @@ file_regex => qr/\.plugin$/ +=head2 include_editor_junk + +By default C ignores files that look like they were +left behind by editors. Currently this means files ending in F<~> (~), +the extensions F<.swp> or F<.swo>, or files beginning with F<.#>. + +Setting C changes C so it does +not ignore any files it finds. =head1 METHODs diff -urN perl-5.10.0.orig/MANIFEST perl-5.10.0/MANIFEST --- perl-5.10.0.orig/MANIFEST 2007-12-18 02:47:07.000000000 -0800 +++ perl-5.10.0/MANIFEST 2009-08-31 19:47:24.452770885 -0700 @@ -3612,11 +3612,14 @@ t/Module_Pluggable/09require.t Module::Pluggable tests t/Module_Pluggable/10innerpack_inner.t Module::Pluggable tests t/Module_Pluggable/10innerpack_noinner.t Module::Pluggable tests +t/Module_Pluggable/10innerpack_onefile.t Module::Pluggable tests t/Module_Pluggable/10innerpack_override.t Module::Pluggable tests +t/Module_Pluggable/10innerpack_super.t Module::Pluggable tests t/Module_Pluggable/10innerpack.t Module::Pluggable tests t/Module_Pluggable/11usetwice.t Module::Pluggable tests t/Module_Pluggable/12onlyarray.t Module::Pluggable tests t/Module_Pluggable/12onlyregex.t Module::Pluggable tests +t/Module_Pluggable/12onlyrequire.t Module::Pluggable tests t/Module_Pluggable/12only.t Module::Pluggable tests t/Module_Pluggable/13exceptarray.t Module::Pluggable tests t/Module_Pluggable/13exceptregex.t Module::Pluggable tests @@ -3628,8 +3631,15 @@ t/Module_Pluggable/18skipped_package.t Module::Pluggable tests t/Module_Pluggable/19can_ok_clobber.t Module::Pluggable tests t/Module_Pluggable/20dodgy_files.t Module::Pluggable tests +t/Module_Pluggable/21editor_junk.t Module::Pluggable tests t/Module_Pluggable/acme/Acme/MyTest/Plugin/Foo.pm Module::Pluggable tests t/Module_Pluggable/lib/Acme/MyTest/Plugin/Foo.pm Module::Pluggable tests +t/Module_Pluggable/lib/Acme/Foo-Bar.pm Module::Pluggable tests +t/Module_Pluggable/lib/EditorJunk/Plugin/Foo.pm Module::Pluggable tests +t/Module_Pluggable/lib/EditorJunk/Plugin/Bar.pm.swo Module::Pluggable tests +t/Module_Pluggable/lib/EditorJunk/Plugin/Bar.pm.swp Module::Pluggable tests +t/Module_Pluggable/lib/EditorJunk/Plugin/Bar.pm~ Module::Pluggable tests +t/Module_Pluggable/lib/EditorJunk/Plugin/Bar.pm Module::Pluggable tests t/Module_Pluggable/lib/ExtTest/Plugin/Bar.plugin Module::Pluggable tests t/Module_Pluggable/lib/ExtTest/Plugin/Foo.plugin Module::Pluggable tests t/Module_Pluggable/lib/ExtTest/Plugin/Quux/Foo.plugin Module::Pluggable tests @@ -3646,6 +3656,7 @@ t/Module_Pluggable/lib/OddTest/Plugin/-Dodgy.pm Module::Pluggable tests t/Module_Pluggable/lib/OddTest/Plugin/Foo.pm Module::Pluggable tests t/Module_Pluggable/lib/TA/C/A/I.pm Module::Pluggable tests +t/Module_Pluggable/lib/Zot/.Zork.pm Module::Pluggable tests t/mro/basic_01_c3.t mro tests t/mro/basic_01_dfs.t mro tests t/mro/basic_02_c3.t mro tests diff -urN perl-5.10.0.orig/t/Module_Pluggable/02alsoworks.t perl-5.10.0/t/Module_Pluggable/02alsoworks.t --- perl-5.10.0.orig/t/Module_Pluggable/02alsoworks.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/02alsoworks.t 2009-08-31 19:47:24.454770805 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 5; my $foo; diff -urN perl-5.10.0.orig/t/Module_Pluggable/02works.t perl-5.10.0/t/Module_Pluggable/02works.t --- perl-5.10.0.orig/t/Module_Pluggable/02works.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/02works.t 2009-08-31 19:47:24.455771358 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 5; my $foo; diff -urN perl-5.10.0.orig/t/Module_Pluggable/03diffname.t perl-5.10.0/t/Module_Pluggable/03diffname.t --- perl-5.10.0.orig/t/Module_Pluggable/03diffname.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/03diffname.t 2009-08-31 19:47:24.456771493 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 3; my $foo; diff -urN perl-5.10.0.orig/t/Module_Pluggable/04acmedir_single.t perl-5.10.0/t/Module_Pluggable/04acmedir_single.t --- perl-5.10.0.orig/t/Module_Pluggable/04acmedir_single.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/04acmedir_single.t 2009-08-31 19:47:24.456771493 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 3; diff -urN perl-5.10.0.orig/t/Module_Pluggable/04acmedir.t perl-5.10.0/t/Module_Pluggable/04acmedir.t --- perl-5.10.0.orig/t/Module_Pluggable/04acmedir.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/04acmedir.t 2009-08-31 19:47:24.457771627 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 3; diff -urN perl-5.10.0.orig/t/Module_Pluggable/04acmepath_single.t perl-5.10.0/t/Module_Pluggable/04acmepath_single.t --- perl-5.10.0.orig/t/Module_Pluggable/04acmepath_single.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/04acmepath_single.t 2009-08-31 19:47:24.458773508 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 3; diff -urN perl-5.10.0.orig/t/Module_Pluggable/04acmepath.t perl-5.10.0/t/Module_Pluggable/04acmepath.t --- perl-5.10.0.orig/t/Module_Pluggable/04acmepath.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/04acmepath.t 2009-08-31 19:47:24.459772105 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 3; diff -urN perl-5.10.0.orig/t/Module_Pluggable/05postpath.t perl-5.10.0/t/Module_Pluggable/05postpath.t --- perl-5.10.0.orig/t/Module_Pluggable/05postpath.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/05postpath.t 2009-08-31 19:47:24.460771332 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 3; diff -urN perl-5.10.0.orig/t/Module_Pluggable/06multipath.t perl-5.10.0/t/Module_Pluggable/06multipath.t --- perl-5.10.0.orig/t/Module_Pluggable/06multipath.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/06multipath.t 2009-08-31 19:47:24.461771676 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 3; diff -urN perl-5.10.0.orig/t/Module_Pluggable/07instantiate.t perl-5.10.0/t/Module_Pluggable/07instantiate.t --- perl-5.10.0.orig/t/Module_Pluggable/07instantiate.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/07instantiate.t 2009-08-31 19:47:24.462772090 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 6; my $foo; @@ -26,7 +26,7 @@ use File::Spec::Functions qw(catdir); use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Module::Pluggable (search_path => ["MyTest::Extend::Plugin"], sub_name => 'booga', instantiate => 'new'); use Module::Pluggable (search_path => ["MyTest::Extend::Plugin"], sub_name => 'wooga', instantiate => 'nosomuchmethod'); diff -urN perl-5.10.0.orig/t/Module_Pluggable/08nothing.t perl-5.10.0/t/Module_Pluggable/08nothing.t --- perl-5.10.0.orig/t/Module_Pluggable/08nothing.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/08nothing.t 2009-08-31 19:47:24.463771316 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 2; diff -urN perl-5.10.0.orig/t/Module_Pluggable/09require.t perl-5.10.0/t/Module_Pluggable/09require.t --- perl-5.10.0.orig/t/Module_Pluggable/09require.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/09require.t 2009-08-31 19:47:24.464771800 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 2; my $t = MyTest->new(); diff -urN perl-5.10.0.orig/t/Module_Pluggable/10innerpack_inner.t perl-5.10.0/t/Module_Pluggable/10innerpack_inner.t --- perl-5.10.0.orig/t/Module_Pluggable/10innerpack_inner.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/10innerpack_inner.t 2009-08-31 19:47:24.465771515 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 3; diff -urN perl-5.10.0.orig/t/Module_Pluggable/10innerpack_noinner.t perl-5.10.0/t/Module_Pluggable/10innerpack_noinner.t --- perl-5.10.0.orig/t/Module_Pluggable/10innerpack_noinner.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/10innerpack_noinner.t 2009-08-31 19:47:24.479772629 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 3; diff -urN perl-5.10.0.orig/t/Module_Pluggable/10innerpack_onefile.t perl-5.10.0/t/Module_Pluggable/10innerpack_onefile.t --- perl-5.10.0.orig/t/Module_Pluggable/10innerpack_onefile.t 1969-12-31 16:00:00.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/10innerpack_onefile.t 2009-08-31 19:47:24.480772134 -0700 @@ -0,0 +1,27 @@ +#!perl -wT + +use strict; +use Test::More tests => 2; +use Data::Dumper; + +my $mc = MyClass->new(); +my $mc2 = MyClass2->new(); + + +is_deeply([$mc->plugins], [qw(MyClass::Plugin::MyPlugin)], "Got inner plugin"); +is_deeply([$mc2->plugins], [], "Didn't get plugin"); + +package MyClass::Plugin::MyPlugin; +sub pretty { print "I am pretty" }; + +package MyClass; +use Module::Pluggable inner => 1; + +sub new { return bless {}, $_[0] } + +package MyClass2; +use Module::Pluggable search_path => "MyClass::Plugin", inner => 0; + +sub new { return bless {}, $_[0] } +1; + diff -urN perl-5.10.0.orig/t/Module_Pluggable/10innerpack_override.t perl-5.10.0/t/Module_Pluggable/10innerpack_override.t --- perl-5.10.0.orig/t/Module_Pluggable/10innerpack_override.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/10innerpack_override.t 2009-08-31 19:47:24.481771501 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 3; diff -urN perl-5.10.0.orig/t/Module_Pluggable/10innerpack_super.t perl-5.10.0/t/Module_Pluggable/10innerpack_super.t --- perl-5.10.0.orig/t/Module_Pluggable/10innerpack_super.t 1969-12-31 16:00:00.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/10innerpack_super.t 2009-08-31 19:47:24.482771565 -0700 @@ -0,0 +1,29 @@ +#!perl -wT + +use Test::More tests => 3; +use strict; +use_ok('Devel::InnerPackage'); +Bar->whee; +is_deeply([Devel::InnerPackage::list_packages("Bar")],[], "Don't pick up ::SUPER pseudo stash"); +is_deeply([Devel::InnerPackage::list_packages("Foo")],['Foo::Bar'], "Still pick up other inner package"); + +package Foo; + +sub whee { + 1; +} + +package Foo::Bar; + +sub whee {} + +package Bar; +use base 'Foo'; + +sub whee { + shift->SUPER::whee; + 2; +} + + +1; diff -urN perl-5.10.0.orig/t/Module_Pluggable/10innerpack.t perl-5.10.0/t/Module_Pluggable/10innerpack.t --- perl-5.10.0.orig/t/Module_Pluggable/10innerpack.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/10innerpack.t 2009-08-31 19:47:24.483771909 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 4; diff -urN perl-5.10.0.orig/t/Module_Pluggable/11usetwice.t perl-5.10.0/t/Module_Pluggable/11usetwice.t --- perl-5.10.0.orig/t/Module_Pluggable/11usetwice.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/11usetwice.t 2009-08-31 19:47:24.484771624 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 3; my $foo; diff -urN perl-5.10.0.orig/t/Module_Pluggable/12onlyarray.t perl-5.10.0/t/Module_Pluggable/12onlyarray.t --- perl-5.10.0.orig/t/Module_Pluggable/12onlyarray.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/12onlyarray.t 2009-08-31 19:47:24.485772038 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 10; { diff -urN perl-5.10.0.orig/t/Module_Pluggable/12onlyregex.t perl-5.10.0/t/Module_Pluggable/12onlyregex.t --- perl-5.10.0.orig/t/Module_Pluggable/12onlyregex.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/12onlyregex.t 2009-08-31 19:47:24.485772038 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 10; { diff -urN perl-5.10.0.orig/t/Module_Pluggable/12onlyrequire.t perl-5.10.0/t/Module_Pluggable/12onlyrequire.t --- perl-5.10.0.orig/t/Module_Pluggable/12onlyrequire.t 1969-12-31 16:00:00.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/12onlyrequire.t 2009-08-31 19:47:24.505021273 -0700 @@ -0,0 +1,21 @@ +#!perl -w +use strict; +use FindBin; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); +use Test::More tests => 2; + +my @packages = eval { Zot->_dist_types }; +is($@, '', "No warnings"); +is(scalar(@packages), 0, "Correctly only got 1 package"); + + +package Zot; +use strict; +use Module::Pluggable ( + sub_name => '_dist_types', + search_path => __PACKAGE__, + only => qr/Zot::\w+$/, + require => 1, + ); + +1; diff -urN perl-5.10.0.orig/t/Module_Pluggable/12only.t perl-5.10.0/t/Module_Pluggable/12only.t --- perl-5.10.0.orig/t/Module_Pluggable/12only.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/12only.t 2009-08-31 19:47:24.506022385 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 10; { diff -urN perl-5.10.0.orig/t/Module_Pluggable/13exceptarray.t perl-5.10.0/t/Module_Pluggable/13exceptarray.t --- perl-5.10.0.orig/t/Module_Pluggable/13exceptarray.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/13exceptarray.t 2009-08-31 19:47:24.507021263 -0700 @@ -1,8 +1,8 @@ -#!perl -w +#!perl -wT use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 10; { diff -urN perl-5.10.0.orig/t/Module_Pluggable/13exceptregex.t perl-5.10.0/t/Module_Pluggable/13exceptregex.t --- perl-5.10.0.orig/t/Module_Pluggable/13exceptregex.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/13exceptregex.t 2009-08-31 19:47:24.510021945 -0700 @@ -1,8 +1,8 @@ -#!perl -w +#!perl -wT use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 10; { diff -urN perl-5.10.0.orig/t/Module_Pluggable/13except.t perl-5.10.0/t/Module_Pluggable/13except.t --- perl-5.10.0.orig/t/Module_Pluggable/13except.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/13except.t 2009-08-31 19:47:24.511021381 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 10; { diff -urN perl-5.10.0.orig/t/Module_Pluggable/14package.t perl-5.10.0/t/Module_Pluggable/14package.t --- perl-5.10.0.orig/t/Module_Pluggable/14package.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/14package.t 2009-08-31 19:47:24.842414378 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 5; my $foo; diff -urN perl-5.10.0.orig/t/Module_Pluggable/15topicsafe.t perl-5.10.0/t/Module_Pluggable/15topicsafe.t --- perl-5.10.0.orig/t/Module_Pluggable/15topicsafe.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/15topicsafe.t 2009-08-31 19:47:24.842774343 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More 'no_plan'; use Module::Pluggable search_path => 'Acme::MyTest'; diff -urN perl-5.10.0.orig/t/Module_Pluggable/16different_extension.t perl-5.10.0/t/Module_Pluggable/16different_extension.t --- perl-5.10.0.orig/t/Module_Pluggable/16different_extension.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/16different_extension.t 2009-08-31 19:47:24.843800947 -0700 @@ -2,7 +2,7 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests => 5; my $foo; diff -urN perl-5.10.0.orig/t/Module_Pluggable/17devel_inner_package.t perl-5.10.0/t/Module_Pluggable/17devel_inner_package.t --- perl-5.10.0.orig/t/Module_Pluggable/17devel_inner_package.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/17devel_inner_package.t 2009-08-31 19:47:24.843800947 -0700 @@ -3,7 +3,7 @@ use Devel::InnerPackage qw(list_packages); use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); my @packages; diff -urN perl-5.10.0.orig/t/Module_Pluggable/18skipped_package.t perl-5.10.0/t/Module_Pluggable/18skipped_package.t --- perl-5.10.0.orig/t/Module_Pluggable/18skipped_package.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/18skipped_package.t 2009-08-31 19:47:24.844780129 -0700 @@ -2,7 +2,7 @@ use Test::More tests => 1; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Devel::InnerPackage qw(list_packages); use No::Middle; diff -urN perl-5.10.0.orig/t/Module_Pluggable/19can_ok_clobber.t perl-5.10.0/t/Module_Pluggable/19can_ok_clobber.t --- perl-5.10.0.orig/t/Module_Pluggable/19can_ok_clobber.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/19can_ok_clobber.t 2009-08-31 19:47:24.844780129 -0700 @@ -3,7 +3,7 @@ use warnings; use Data::Dumper; use FindBin; -use lib "$FindBin::Bin/lib"; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); use Test::More tests=>5; diff -urN perl-5.10.0.orig/t/Module_Pluggable/20dodgy_files.t perl-5.10.0/t/Module_Pluggable/20dodgy_files.t --- perl-5.10.0.orig/t/Module_Pluggable/20dodgy_files.t 2007-12-18 02:47:08.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/20dodgy_files.t 2009-08-31 19:47:24.845769158 -0700 @@ -1,7 +1,7 @@ #!perl -w BEGIN { - if ($^O eq 'VMS') { + if ($^O eq 'VMS' || $^O eq 'VOS') { print "1..0 # Skip: can't handle misspelled plugin names\n"; exit; } @@ -9,8 +9,18 @@ use strict; use FindBin; -use lib "$FindBin::Bin/lib"; -use Test::More tests => 5; +use Test::More; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); +use File::Spec::Functions qw(catfile); + + +my ($dodgy_file) = (catfile($FindBin::Bin, "lib", "OddTest", "Plugin", "-Dodgy.pm")=~/^(.*)$/); +unless (-f $dodgy_file) { + plan skip_all => "Can't handle misspelled plugin names\n"; +} else { + plan tests => 5; +} + my $foo; ok($foo = OddTest->new()); diff -urN perl-5.10.0.orig/t/Module_Pluggable/21editor_junk.t perl-5.10.0/t/Module_Pluggable/21editor_junk.t --- perl-5.10.0.orig/t/Module_Pluggable/21editor_junk.t 1969-12-31 16:00:00.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/21editor_junk.t 2009-08-31 19:47:24.845769158 -0700 @@ -0,0 +1,53 @@ +#!perl -w + +use Test::More; +use FindBin; +use lib (($FindBin::Bin."/lib")=~/^(.*)$/); +use Module::Pluggable::Object; +use File::Spec::Functions qw(catfile); + +my ($dodgy_file) = (catfile($FindBin::Bin,"lib", "EditorJunk", "Plugin", "#Bar.pm#")=~/^(.*)$/); +unless (-f $dodgy_file) { + plan skip_all => "Can't handle plugin names with octothorpes\n"; +} else { + plan tests => 4; +} + + + +my $foo; +ok($foo = EditorJunk->new()); + +my @plugins; +my @expected = qw(EditorJunk::Plugin::Bar EditorJunk::Plugin::Foo); +ok(@plugins = sort $foo->plugins); + +is_deeply(\@plugins, \@expected, "is deeply"); + + +my $mpo = Module::Pluggable::Object->new( + package => 'EditorJunk', + filename => __FILE__, + include_editor_junk => 1, +); + +@expected = ('EditorJunk::Plugin::.#Bar', 'EditorJunk::Plugin::Bar', 'EditorJunk::Plugin::Foo'); +@plugins = sort $mpo->plugins(); +is_deeply(\@plugins, \@expected, "is deeply"); + + + +package EditorJunk; + +use strict; +use Module::Pluggable; + + +sub new { + my $class = shift; + return bless {}, $class; + +} +1; + + diff -urN perl-5.10.0.orig/t/Module_Pluggable/lib/Acme/Foo-Bar.pm perl-5.10.0/t/Module_Pluggable/lib/Acme/Foo-Bar.pm --- perl-5.10.0.orig/t/Module_Pluggable/lib/Acme/Foo-Bar.pm 1969-12-31 16:00:00.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/lib/Acme/Foo-Bar.pm 2009-08-31 19:47:24.845769158 -0700 @@ -0,0 +1,6 @@ +package Acme::FooBar; + +our $quux = "hello"; + +1; + diff -urN perl-5.10.0.orig/t/Module_Pluggable/lib/EditorJunk/Plugin/Bar.pm perl-5.10.0/t/Module_Pluggable/lib/EditorJunk/Plugin/Bar.pm --- perl-5.10.0.orig/t/Module_Pluggable/lib/EditorJunk/Plugin/Bar.pm 1969-12-31 16:00:00.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/lib/EditorJunk/Plugin/Bar.pm 2009-08-31 19:47:24.846769084 -0700 @@ -0,0 +1,9 @@ +package EditorJunk::Bar; + + +use strict; + + +1; + + diff -urN perl-5.10.0.orig/t/Module_Pluggable/lib/EditorJunk/Plugin/Bar.pm~ perl-5.10.0/t/Module_Pluggable/lib/EditorJunk/Plugin/Bar.pm~ --- perl-5.10.0.orig/t/Module_Pluggable/lib/EditorJunk/Plugin/Bar.pm~ 1969-12-31 16:00:00.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/lib/EditorJunk/Plugin/Bar.pm~ 2009-08-31 19:47:24.851770803 -0700 @@ -0,0 +1,9 @@ +package EditorJunk::Bar; + + +use strict; + + +1; + + diff -urN perl-5.10.0.orig/t/Module_Pluggable/lib/EditorJunk/Plugin/Bar.pm.swo perl-5.10.0/t/Module_Pluggable/lib/EditorJunk/Plugin/Bar.pm.swo --- perl-5.10.0.orig/t/Module_Pluggable/lib/EditorJunk/Plugin/Bar.pm.swo 1969-12-31 16:00:00.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/lib/EditorJunk/Plugin/Bar.pm.swo 2009-08-31 19:47:24.852771985 -0700 @@ -0,0 +1,9 @@ +package EditorJunk::Bar; + + +use strict; + + +1; + + diff -urN perl-5.10.0.orig/t/Module_Pluggable/lib/EditorJunk/Plugin/Bar.pm.swp perl-5.10.0/t/Module_Pluggable/lib/EditorJunk/Plugin/Bar.pm.swp --- perl-5.10.0.orig/t/Module_Pluggable/lib/EditorJunk/Plugin/Bar.pm.swp 1969-12-31 16:00:00.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/lib/EditorJunk/Plugin/Bar.pm.swp 2009-08-31 19:47:24.853771770 -0700 @@ -0,0 +1,9 @@ +package EditorJunk::Bar; + + +use strict; + + +1; + + diff -urN perl-5.10.0.orig/t/Module_Pluggable/lib/EditorJunk/Plugin/Foo.pm perl-5.10.0/t/Module_Pluggable/lib/EditorJunk/Plugin/Foo.pm --- perl-5.10.0.orig/t/Module_Pluggable/lib/EditorJunk/Plugin/Foo.pm 1969-12-31 16:00:00.000000000 -0800 +++ perl-5.10.0/t/Module_Pluggable/lib/EditorJunk/Plugin/Foo.pm 2009-08-31 19:47:24.854771835 -0700 @@ -0,0 +1,9 @@ +package EditorJunk::Foo; + + +use strict; + + +1; + +