Markus Pitha: Wann erkennt -d ein Verzeichnis?

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.

--
sh:( fo:| ch:? rl:( br:> n4:( ie:{ mo:) va:) de:] zu:) fl:( ss:| ls:] js:|
  1. 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

    --
    Death is God's way of telling you not to be such a wise guy.
    http://wwwtech.de/
    1. 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.

      --
      sh:( fo:| ch:? rl:( br:> n4:( ie:{ mo:) va:) de:] zu:) fl:( ss:| ls:] js:|
      1. 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

        --
        Zu wissen, was wir nicht wissen, ist die Quelle der Weisheit.
        http://wwwtech.de/
        1. Hi,
          danke, du hattest Recht.

          Markus.

          --
          sh:( fo:| ch:? rl:( br:> n4:( ie:{ mo:) va:) de:] zu:) fl:( ss:| ls:] js:|