Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Perl ja readdir() ongelma

Jarkko [13.07.2006 22:48:38]

#

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.

Jarkko [15.07.2006 00:01:33]

#

Noniih.. Päivittelimpä perlin ja ongelmat katosi. Oli myös split():n kanssa hieman ongelmia, kun sekin antoi paluuarvona mitä sattuu.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta