in reply to Pls explain this syntax

1) when a variable is declared in the main block only, why do we neeed to make it local ?

Huh? I don't see the local keyword anywhere in the code you've posted. But see my/local, space/time (was: Re: The difference between my and local).

2) my $dirname = dirname $old_name ; # what does this syntax mean ? I have used $num = @number, to find out the number of elements in an array. I have not used any kind of name before a variable name so far.

dirname is a funtion defined inFile::Basename.

3) s/^/not/, # does it mean that not will be added at the start of the string ?

Yes.

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

s// can take any sensible delimiters. See perle, perlop and such.

Read the documentation!