Wann erkennt -d ein Verzeichnis?
Markus Pitha
- perl
Hallo,
ich stehe vor dem kleinen Problem, dass if (-d $_) nur dann ein Verzeichnis als Verzeichnis erkennt, wenn es die Verzeichnisse . und .. sind. Warum ist das so, und wie kann man mit diesem Schalter Perl dazu bringen, alle Verzeichnisse zu erkennen?
Markus.
Hallo Markus,
ich stehe vor dem kleinen Problem, dass if (-d $_) nur dann ein Verzeichnis als
Verzeichnis erkennt, wenn es die Verzeichnisse . und .. sind. Warum ist das so, und
wie kann man mit diesem Schalter Perl dazu bringen, alle Verzeichnisse zu erkennen?
Das ist eindeutig nicht so. Da hast du einen Programmierfehler begangen.
Grüße,
CK
Hi,
ja, aber ich verstehe trotzdem nicht, warum das in meinem Fall so ist. Hier der Bsp. Code.
opendir(DIR, $dir) or die "Cant open dir :$!\n";
while (defined($_ = readdir DIR)) {
push @dir, $_;
}
closedir DIR;
foreach(sort{$a cmp $b} @dir) {
if (-d $_) { print "<span class="dir">$_/</span><br />\n"; }
else { print "<span class="file">$_</span><br />\n"; }
}
In $dir steht ein Pfad, den man im CGI-Script eintippen kann.
Markus.
Hallo Markus,
ja, aber ich verstehe trotzdem nicht, warum das in meinem Fall so ist.
Du gehst davon aus, dass $dir das PWD ist. Das ist dein Fehler.
opendir(DIR, $dir) or die "Cant open dir :$!\n";
while (defined($_ = readdir DIR)) {
push @dir, $_;
}
closedir DIR;
foreach(sort{$a cmp $b} @dir) {
if (-d $_) { print "<span class="dir">$_/</span><br />\n"; }
else { print "<span class="file">$_</span><br />\n"; }
}
So waere es richtig:
opendir DIR, $dir or die "opendir($dir): $!\n";
my @ents = sort readdir DIR;
foreach my $ent (@ents) {
if(-d "$dir/$ent") {
print "<span class="dir">$ent/</span><br />\n";
}
else {
print "<span class="file">$ent</span><br />\n";
}
}
Grüße,
CK
Hi,
danke, du hattest Recht.
Markus.