Can y'all show me what I am doing wrong when i run the package is shows that it is using the $name from the Cat package and not Dog
Read our.
package Dog;
our $name="Odie";
Here you are creating an alias of the package variable $Dog::name whose scope goes from there to end of file and spans packages. So, in your package Cat the variable $name also refers to $Dog::name whose value you are overwriting.
package Dog;
our $name = "Odie";
print "dog's name is '$name'\n";
package Cat;
$name = 'Garfield';
print "package var \$Cat::name is '$Cat::name'\n";
print "\$name is '$name'\n";
print "package var \$Dog::name is '$Dog::name'\n";
__END__
dog's name is 'Odie'
package var $Cat::name is ''
$name is 'Garfield'
package var $Dog::name is 'Garfield'
perl -le'print map{pack c,($-++?1:13)+ord}split//,ESEL'