# good, open with error checking opendir(DIR, "$dir") || die "can't open $dir $!\n"; # maybe name the variable @filenames - as there is more than one # or get rid of the variable altogether by saying # foreach my $oldname ( readdir(DIR) ) my @filename = readdir (DIR); # declare filename with my and give better name (see above) # foreach my $oldname (@filename) foreach $filename (@filename) { # this matches against the special variable $_ # (which you are not using) you want # if ($filename =~ / /) if (/ /) { # the regex is completely wrong you want either # s/ +/./g or tr/ /./ try to figure out the difference # and $newfile is never assigned a value so: my $newfile = $oldfile; $newfile =~ s/ +/./g; # you don't have to do the rename when you didn't # change anything, so rename($oldname, $newfile) unless $oldname eq $newfile; } } closedir(DIR);