Koodailimpa tuossa ohjelman jolla voi poistaa tiedoston nimistä kaikki ei-toivotut merkit. Koodia testaillessani huomasin pari ihmeellistä bugia readdir():n kanssa. Joidenkin hakemistojen sisältö tulee taulukkoon vain yhdelle riville, vaikka sen kuuluisi jakautua aina uuteen alkiion, sama ongelma myös käyttäessä glob():ia.
Keksiikö joku sille jonkin järkevän syyn ja mielellään myös ratkaisun?
#!/usr/local/bin/perl -w
use strict;
my $OK_CHARS = '-a-zA-Z0-9_.@+,()~';
SearchDirs($ARGV[0]);
sub SearchDirs
{
my $path = shift @_;
my $tmp;
$path = $path . "/";
print "Current path: $path\n";
opendir(DIR, $path) || die "Couldn't open directory \"$path\": $!";
my @files = readdir(DIR);
closedir DIR;
foreach (<@files>)
{
if (m/[^$OK_CHARS]/)
{
print "$path$_\n";
$tmp = $_;
$tmp =~ s/[^$OK_CHARS]/_/go;
print "-> $path$tmp\n";
# rename($path . $_, $path . $tmp);
}
if ($_ !~ m/^\./)
{
SearchDirs($path . $_) if (-d ($path . $_));
}
}
}Koodi toimii ainakin linuxissa väärin.
Noniih.. Päivittelimpä perlin ja ongelmat katosi. Oli myös split():n kanssa hieman ongelmia, kun sekin antoi paluuarvona mitä sattuu.
Aihe on jo aika vanha, joten et voi enää vastata siihen.