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.