Думаю этот код сделает то что вы хотите:
#!/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);
}