package CGI::Switch; use Carp; use strict; use vars qw($VERSION @Pref); $VERSION = '0.06'; @Pref = qw(CGI::Apache CGI); #default sub import { my($self,@arg) = @_; @Pref = @arg if @arg; } sub new { shift; my($file,$pack); for $pack (@Pref) { ($file = $pack) =~ s|::|/|g; eval { require "$file.pm"; }; if ($@) { #XXX warn $@; next; } else { #XXX warn "Going to try $pack\->new\n"; my $obj; eval {$obj = $pack->new(@_)}; if ($@) { #XXX warn $@; } else { return $obj; } } } Carp::croak "Couldn't load+construct any of @Pref\n"; } 1; __END__ =head1 NAME CGI::Switch - Try more than one constructors and return the first object available =head1 SYNOPSIS use CGISwitch; -or- use CGI::Switch This, That, CGI::XA, Foo, Bar, CGI; my $q = new CGI::Switch; =head1 DESCRIPTION Per default the new() method tries to call new() in the three packages Apache::CGI, CGI::XA, and CGI. It returns the first CGI object it succeeds with. The import method allows you to set up the default order of the modules to be tested. =head1 SEE ALSO perl(1), Apache(3), CGI(3), CGI::XA(3) =head1 AUTHOR Andreas KEnig Ea.koenig@mind.deE =cut