package MyStuff::Database; %db_conns = (); sub _DBconnect_internal { my ($dsn, $user, $password, $host, $tag, $options) = @_; if (not exists $db_conns{"$tag:initialized"}) { $db_conns{"$tag:data"}->{conn} = [$dsn, $user, $password, $host]; $db_conns{"$tag:initialized"} = 1; &Log("DB Handle $tag ready for connect.") if $_debug > 5; return; } #Connecting happens here . . . } ##END OF PACKAGE use MyStuff::Database qw(%db_conns _DBconnect_internal _DoQuery); Variant 1 sub DBConnect { _DBconnect_internal('DBI:mysql:database=test;host=localhost;port=', 'foo', 'bar', 'TestDB', 'mysql'); } . . &DBConnect; &server_start; . . Variant 2 use MyStuff::Database qw(%db_conns _DBconnect_internal _DoQuery); sub DBConnect { $MyStuff::Database::db_conns{"mysql:data"}->{conn}= ['DBI:mysql:database=test;host=localhost;port=', 'foo', 'bar']; $MyStuff::Database::db_conns{"mysql:initialized"} = 1; } . . &DBConnect; &server_start; . .