$xNeTworKx: verschachteltes $_ ?

Hi,
vorweg mal folgendes Scriptschnipsel :

foreach(sort {$b <=> $a} @yearlist)   {
     print "<table style="width:700px">\n";
     print "<th><td class="statistikmiddle">gezählte Besuche im Jahr $_ </td></th>\n";

opendir(DIR,"../../cgi/statistik/$_") or die "Cant open ../../cgi/statistik/$_ : $!\n";
                while (defined(my $file = readdir DIR))   {
                    if ($file =~ /^\d\d?.txt$/)   {
                     open(FILE,"../../cgi/statistik/$_/$file") or die "Cant open ../../cgi/statistik/$_/$file : $!\n";
                     chomp(my $input = <FILE>);
                     print "<tr><td class="statistikright">$monate[$mon - 1] : </td><td> $input</td></tr>\n";
                    close FILE;
                    }
                }
                closedir DIR;
     print "</table>\n";
     }

Ich habe $_ für das Durchlaufen des ersten Arrays benutzt. Jetzt wollte ich in den tieferen Abschnitten $_ wieder benutzen, anstatt beim Öffnen des Verzeichnisses die Daten $file zuzuordnen, aber plötzlich wurde das erste $_ durch das  zweite überschrieben.
Muss ich wirklich beim Einlesen des Verzeichnisses die Daten einer Variable zuordnen, oder gibt es auch hier eine Möglichkeit, ohne eine Variable auszukommen, wenn ich $_ vorher schon benutzt habe ?
(zB while (defined(my $file = readdir DIR))  wollte ich als while (defined($_ = readdir DIR)) schreiben, aber diees $_ überschrieb das erste.)

$xNeTworKx.

  1. Hi,

    foreach(sort {$b <=> $a} @yearlist)   {

    benutze hier
    foreach my $item (sort {$b <=> $a} @yearlist)   {
    und ersetze alle "äußeren" $_ durch $item

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    1. Hi,

      foreach(sort {$b <=> $a} @yearlist)   {
      benutze hier
      foreach my $item (sort {$b <=> $a} @yearlist)   {
      und ersetze alle "äußeren" $_ durch $item

      Sann hab ich aber leider wieder eine Variablenzuweisung, was ich aber vermeiden wollte?

      $xNeTworKx.

      1. Hi,

        Sann hab ich aber leider wieder eine Variablenzuweisung, was ich aber vermeiden wollte?

        Die hast Du so oder so.
        Nur heißt die Variable im einen Fall $_ und im anderen Fall $item.
        Und selbst wenn es eine zusätzliche Variablenzuweisung wäre: was wäre daran so schlimm?

        cu,
        Andreas

        --
        Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
        1. Hi,

          Und selbst wenn es eine zusätzliche Variablenzuweisung wäre: was wäre daran so schlimm?

          Ich will, dass meien Scripts so effizient wie möglich sind :)

          $xNeTworKx.

          1. use Mosche;

            Ich will, dass meien Scripts so effizient wie möglich sind :)

            Es ist die einfachste Möglichkeit, es zu machen. Wenn du Scripte wirklich effizient machen willst, nimm C, C++, ... aber nicht Perl. Vor allem aber sollte es dir darum gehen, dass du deine Script in einem halben Jahr nochmals verstehst.

            use Tschoe qw(Matti);

            --

              Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
          2. Hi,

            Ich will, dass meien Scripts so effizient wie möglich sind :)

            Voraussetzung für Effizienz ist aber Effektivität...
            cu,
            Andreas

            --
            Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
          3. Hallo,

            Ich will, dass meien Scripts so effizient wie möglich sind :)

            Und Lesbarkeit ist auch eine Form von Effizienz.
            (Damit ich auch noch einen gescheiten Spruch ablasse:-))

            Nein im Ernst, oft sieht man ganz abenteuerliche Konstrukte, die scheinbar nur deshalb so formuliert wurden, um die Geschwindigkeit zu steigern. Oft sind sie aber einfach nur undurchsichtig. Was dann auch wieder zur Folge haben kann, daß man die eigentlichen Performancebremsen nicht mehr wirklich sieht.

            Auch beim Profiling hilft ein gut strukturierter Code ungemein.

            Grüße
              Klaus