An alternate approach to to do it this way:
- User::Base <- base class that implements the default methods
- User::{DB,LDAP,...} <- inherit from User::Base and provide specific implementations
- User <- Factory class that inspects the details and returns the right class
my $user = User->new( system => 'LDAP' , ...); # $user isa User::LDAP