#!/usr/bin/perl use strict; use warnings; use A; #require A; use Data::Dumper; my $test = A::B->new(test => 1); print Dumper $test; __END__ file A.pm: package A; use strict; use warnings; sub B{ print "A::B called with args <@_>\n"; #return 'A::B' unless (@_); shift; return A::B->new(@_); } package A::B; sub new{ print "A::B::new called with args: <@_>\n"; my $class = shift; my $self = {@_}; bless $self, $class; return $self; } 1;