どこのサイトで見たのか知らんが、
package 名の決め打ちは引数付きの時にトラぶるから
お勧めしない。

#!/usr/bin/env perl
package TEST;
sub make { my $self = 'TEST' ; bless { dat => shift }, $self }
sub echo {printf "%s\n", shift->{dat} ;}
1;
package TEST2;
sub new { bless { dat => pop }, shift }
sub echo {printf "%s\n", shift->{dat} ;}
1;

package main;
TEST-> make('hoge')->echo; # => 'TEST'
TEST2->new ('hoge')->echo; # => 'hoge'

1;