The following script renames the files of the current directory. All white space characters are replaced by '_'.
#!/usr/bin/perl -w
use strict;
sub yesno { print "$_[0] y/[n]: ";return (<STDIN> =~ /^(y|Y)$/);}
#
# read the file names of the current directory
#
opendir( D, ".");
my @files = readdir(D);
closedir( D);
foreach my $fname (@files)
{
#
# remove leading/trailing white space
#
$fname =~ s/^\s*(.*?)\s*$/$1/;
#
# see, if the file name still contains white space
#
next if( $fname !~ /\s/ &&
$fname !~ /[\200-\377]/);
my $fname_new = $fname;
#
# replace any white space character by '_', Umlaute
#
$fname_new =~ s/\s/_/g;
$fname_new =~ s/\344/ae/g;
$fname_new =~ s/\304/Ae/g;
$fname_new =~ s/\366/oe/g;
$fname_new =~ s/\326/Oe/g;
$fname_new =~ s/\374/ue/g;
$fname_new =~ s/\334/Ue/g;
$fname_new =~ s/\337/sz/g;
if( yesno( " rename \"$fname\" to $fname_new"))
{
system( "mv \"$fname\" $fname_new");
}
}
exit 0;