Думаю этот код сделает то что вы хотите:
#!/usr/bin/perl -w
my $dir=\'./dir\';  #откуда пойдем плясать
my $idx_ext=\'.html\'; #что ищем
recur($dir);
sub recur
{
 my $dir = shift;
 opendir DIR, $dir or return;
 my @contents = map "$dir/$_", sort grep !/^\\.\\.?$/, readdir DIR;
 closedir DIR;
 foreach (@contents)
  {
   if (!-l && -d)
    {
     recur($_);
    }
   else
    {
     if ($_ =~ /$idx_ext$/i)
      {
      edit($_);
      }
     else { next; }
    }
  }
}
sub edit {
my $filename=shift;
print "Edit $filename\\n";
my $cur_dir=(stat(split(/\\//,$filename)))[2];
print "Change $cur_dir to";
$ed_dir=$cur_dir;
$ed_dir=~s/[-]/_/;
print " $ed_dir\\n";
open(FILE,"<",$filename) || die "$!\\n";
open(NEW,">","$filename.new") || die "$!\\n";
while() {
chomp;
s/$cur_dir/$ed_dir/;
print NEW $_,"\\n";
}
close(FILE);
close(NEW);
unlink($filename);
rename("$filename.new",$filename);
}