in reply to OO Perl: classes and database access

Sometimes it helps to look at these kinds of interactions in a class interaction diagram of sorts. Given that you have a User object, one of it's actions is going to be LogIn. I would propose instantiating a User with as small an amount of data as possible (could it just be a username or id?) and let the methods take care of populating the rest of members for you. In example, I would look at doing something like this:

$U = User->new( $user_name ); # at this point there is a minimal amount of data for the User object, + but it should still be functional $U->LogIn(); # handles all of the database connection activity, loads in user info +as well as populates project list, etc.
HTH ... actually, HTII (Hope This Isn't Incoherent)