Dlaczego instancja obiektu perl zastępuje się nawzajem

Napisałem trochę kodu Perla, który składa się z dwóch klas właściwych dla tej podstawowej. Przypuszczam, że wydrukuje coś takiego

Mik: Meow! Meow!
Sat: Woof! Woof!

Ale w rzeczywistości drukuje się w ten sposób:

Sat: Woof! Woof!
Sat: Woof! Woof!

,

package Animal;
sub new {

    my $obj = shift;
    my $name = shift;
    our %pkg = ( 'name' => $name );
    bless \%pkg, $obj;
    return \%pkg;
}

package Cat;
@ISA = ("Animal");

sub new {
    my $obj = shift;
    my $name = shift;
    my $self =  $obj->SUPER::new($name);
    return $self;
}

sub get_name {
    my $obj = shift;
    return $obj->{'name'};
}


sub talk {
    my $obj = shift;
    return "Meow! Meow!";
}

package Dog;
@ISA = ("Animal");

sub new {
    my $obj = shift;
    my $name = shift;
    my $self = $obj->SUPER::new( $name );
    return $self;
}

sub get_name {
    my $obj = shift;
    return $obj->{'name'};
}

sub talk {
    my $obj = shift;
    return "Woof! Woof!";
}

package Main;

my $cat = new Cat('Mike');
my $dog = new Dog('Sat');

print $cat->get_name() . ": " . $cat->talk() , "\n"; 
print $dog->get_name() . ": " . $dog->talk() , "\n";

Ale jeśli zmienię dzwoniącego w ten sposób, wydrukuje to, co przypuszczam. To dziwne, dlaczego$cat obiekt został nadpisany po$dog został utworzony?

package Main;

my $cat = new Cat('Mily');
print $cat->get_name() . ": " . $cat->talk() , "\n"; 

my $dog = new Dog('Sat');
print $dog->get_name() . ": " . $dog->talk() , "\n";

questionAnswers(3)

yourAnswerToTheQuestion