Steve: Frage zu undef

Hallo,

ich bin gerade über die Function undef in einem Codeschnippsel  gestolpert:

$db->Sql("SELECT * FROM user");

while ($db->FetchRow())
{
 undef %daten;

%daten = $db->DataHash();

for ($iTemp = 0; $iTemp < $spalten; $iTemp++)
 {
  print "$daten{$felderNamen[$iTemp]} ";
 }
}

Was soll denn der Befehl undef %daten ? Ich habe gelesen, dieser löscht Variablen/Hashes.  Der nachfolgende Befehl %daten = $db->DataHash(); überschreibt doch eh die Variable.

Ist der Befehl undef %daten; hier sinnvoll?

thx

Steve

  1. Hallo Steve,

    Ist der Befehl undef %daten; hier sinnvoll?

    Nein, er ist voellig ueberfluessig. Vermutlich meint der Autor des Scripts etwas wie das
    hier:

    while($db->FetchRow()) {
      my %daten = $db->DataHash();

    for(my $iTemp = 0; $iTemp < $spalten; ++$iTemp) {
        print "$daten{$felderNamen[$iTemp]} ";
      }
    }

    Grüße,
     CK

    --
    Descartes sagte: 'Ich denke, also bin ich.' Ich hingegen sage: 'Ich denke nicht, also bin ich.'
    http://wwwtech.de/
    1. hi ck und die anderen,

      danke für die info. dann werde ich undef %daten; weglassen.

      mein code soll ja kurz und knackig sein ;-)

      bye

      steve

  2. Ich bin mir nicht 100%ig sicher, aber ich denke, dies ist eine Vorsichtsmaßnahme, um sicherzustellen, dass im Hash keine weiteren Daten sind.

    Wenn der alte Hash länger ist als er durch die neuen Daten wird, dann könnten hinterher evtl. noch irgendwelche "Speicher-Leichen" drin sein.

    Wie gesagt, keine Garantie auf diese Aussage, aber für mich die einzig logische Erklärung.

    Mfg, MF

    1. Hallo MankoFranko,

      Wenn der alte Hash länger ist als er durch die neuen Daten wird, dann könnten hinterher
      evtl. noch irgendwelche "Speicher-Leichen" drin sein.

      Nein.

      Grüße,
       CK

      --
      Auf der ganzen Welt gibt es nichts Weicheres und Schwaecheres als Wasser. Doch in der Art, wie es dem Harten zusetzt, kommt nichts ihm gleich.
      http://wwwtech.de/
      1. Ok, akzeptiert.
        Aber ich denke, dass dies zumindest der Grund war, warum der Schreiber dieses Programms das gemacht hat.
        Bei älteren Programmiersprachen waren solche Schritte nötig, weil dort genau das passiert wäre, was ich beschrieben hatte.

        Und der Mensch ist halt ein Gewohnheitstier.
        Und solange es keinen Schaden anrichtet, warum nicht auf Nummer sicher gehen?

        Demnach können solche Befehle, die nicht wirklich immer Sinn machen, öfter in irgendwelchen fremden Programmen vorkommen.

        Mfg, MF