Thread rekursion klappt nicht (9 answers)
Opened by supersucker at 2006-02-09 21:07

supersucker
 2006-02-10 16:47
#62817 #62817
User since
2005-03-17
118 Artikel
BenutzerIn
[default_avatar]
Quote
Warum verwendest Du eigentlich nicht CPAN: File::Find


siehe eröffnung:

Quote
ps: ich weiss das es für sowas genügend module gibt die rekursiv verzeichnisse durchgehen, würde es aber halt interessehalber gerne selber machen


@murphy:

danke für den hinweis, ich habe jetzt das script nach deinem ersten vorschlag umgeschrieben, leider klappt es immer noch nicht..

die funktion sieht jetzt so aus:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
sub scanDir {

print "scandir() aufgerufen! \n";

# open current directory

local *CURDIR;
opendir(CURDIR, ".") or die "could not open directory $! \n";

# iterate over directory entries

while(my $dirEntry = <CURDIR>) {

# skip "." and ".."

if($dirEntry eq "." || $dirEntry eq "..") {
print "skipping . and ..! \n";
next;
}

# if we encounter a audio-file

if(-f $dirEntry && $dirEntry =~ m/(.*mp3$)|(.*ogg$)/) {
print "renaming file! \n";
renFile($dirEntry);
}

# if we encounter a directory, descend into it and start recursion

elsif(-d $dirEntry) {
chdir($dirEntry) or die "could not open directory $dirEntry! \n";
print "descend into next directory! \n";
scanDir();
}

}

close(CURDIR);

return 0;
}


da krieg ich nun eine merkwürdige (zumindest für mich) fehlermeldung:

Quote
./rectFileNames.pl
start renaming files....
scandir() aufgerufen!
readline() on unopened filehandle CURDIR at ./rectFileNames.pl line 40.
(Are you trying to call readline() on dirhandle CURDIR?)
finished renaming files....


hmm,

damit kann ich überhaupt nichts anfangen, erstens verwende ich readline ja nicht und zweitens öffne ich doch das filehandle.

deinen zweiten vorschlag:

Code: (dl )
opendir(my $curdir, '.') or die "could not open directory: $!\n";


konnte ich nicht verwenden, da ich nicht weiss wie ich darüber iteriere (mit anderen worten, was ich dann in die bedingung der while-schleife schreiben), $curdir wäre doch dann ein skalar, oder?

View full thread rekursion klappt nicht