¿Por qué la instancia de objeto Perl se sobrescribe entre sí?

He escrito algo de código Perl que compone dos clases inherentes a una base. Supongo que imprimiría algo como esto.

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

Pero en realidad se imprime de esta manera:

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";

Pero si cambio la persona que llama de esta manera, se imprime lo que supongo que es. Así que es bastante extraño por qué el$cat objeto fue sobrescrito después de la$dog fue instanciado?

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";

Respuestas a la pregunta(3)

Su respuesta a la pregunta