No, though you will get a warning for it if they are in the same scope,
to help keep you from doing it by accident.
The new declaration will "hide" the old one until the end of its scope:
my $test = 1;
my $test = 2; # warns
{
my $test = 3;
print $test; # prints 3
}
print $test; # prints 2