If the rest of your code uses OO mechanisms, you might want to recode new() so it will work as a class method rather than calling it as a non OO sub (ie. Main::new).
The example below also checks that the passed in var is a valid DBI object. If you had done that in your code, you would have received an error as soon as you called the new method.
package Main;
use strict;
my $dbh;
sub new {
my $class = shift;
my $dbh = shift;
UNIVERSAL::isa($dbh, 'DBI')
or die "Main->new() was invoked without a valid DBI object";
}