in reply to Pls explain this syntax

If a variable is declared local in the main block, does it mean that if a subroutine is declared then this variable can not be used inside subroutines as its declared outside the subroutine as local ?

No, it doesn't. You can use variable in subroutine.

my $dirname = dirname $old_name ; # what does this syntax mean ?

This mean my $dirname = dirname($old_name);. (dirname is a function from File::Basename)

does it mean that not will be added at the start of the string ?

Correct

(my $basename = $name =~ s#./##; # how come there is only one forward slash ?

You can use any symbol as regexp delimiter. This is the same as $name =~ s/.\///