You retyped, you didn't cut'n'paste. You're actually calling it as Main->new( $dbh ), not Main::new( $dbh ). Using Main->new() calls it as a method and passes the receiver (in this case, 'Main') in as the first parameter.
My criteria for good software:
Does it work?
Can someone else come in, make a change, and be reasonably certain no bugs were introduced?