package A::B::C; sub new { print "A::B::C new @_\n" } package A::B; C->new(10); # C->new calls UNIVERSAL::new('C', 10) # caller() returns 'A::B' (the package we were in) # UNIVERSAL::new calls A::B::C->new(10)