QuoteWarum verwendest Du eigentlich nicht CPAN: File::Find
siehe eröffnung:
Quoteps: 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:
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:
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?