This comment is unrelated to your question, but I thought I'd mention something quickly that I've picked up recently and found very useful.
Consider writing your new functions something like this:
sub new {
my $proto=shift;
my $class=ref $proto || $proto;
my $self={ @_ };
## ...
bless $self,$class;
}
Then create your instance like this:
my $inst=new MyClass(
name => 'mr.nick',
rank => 'novice',
sleep_level => 'not enough'
);
I found that by directly putting the class parameters on the new() line like that makes for cleanliness, and readability. And, it makes for a real quick method of stuffing values into the instance of the object.
mr.nick ...