Flo: "use of uninitialized value" Wie Array auffüllen?

Hallo zusammen,

Ich habe 2 Arrays, ein Array z.B. @test hat 20 Werte und @test2 hat 24 Werte! Die Werte können mal mehr, mal weniger sein.

Jetzt lasse ich beide Arrays in einer for-Schleife durchlaufen.

for ($i = 0; $i < @test2; $i++) {
print $test[$i] . " = " . $test2[$i];
}

Da natürlich @test2 mehr Werte hat wie @test kommt die Meldung "Use of uninitialized value". Wie kann ich dies umgehen? Muss ich immer überprüfen wieviele Werte ein Array hat und dieses dann mit einer Schleife auffüllen oder geht dies auch einfacher?

Vielen Dank

Flo

  1. Hi,

    Ich habe 2 Arrays, ein Array z.B. @test hat 20 Werte und @test2 hat 24 Werte! Die Werte können mal mehr, mal weniger sein.

    Jetzt lasse ich beide Arrays in einer for-Schleife durchlaufen.

    for ($i = 0; $i < @test2; $i++) {
    print $test[$i] . " = " . $test2[$i];
    }

    Da natürlich @test2 mehr Werte hat wie @test kommt die Meldung "Use of uninitialized value". Wie kann ich dies umgehen? Muss ich immer überprüfen wieviele Werte ein Array hat und dieses dann mit einer Schleife auffüllen oder geht dies auch einfacher?

    Du koenntest entweder vor der for-Schleife abpruefen, welche Liste laenger ist und die Schleife dann nur sooft durchlaufen lassen, bis das Ende der kuerzeren erreicht ist, oder du pruefst in der Schleife ab, ob $test[$i] definiert ist:

    for (my $i = 0; $i < @test2; $i++)
    {
        if (defined($test[$i]))
        {
            print "$test[$i]  =  $test2[$i]\n";
        }
        else
        {
            print "test[$i] ist nicht definiert\n";
        }
    }

    In diesem Beispiel macht es aber eigentlich keinen Sinn, die Schleife oefters durchlaufen zu lassen, als bis das Ende der kuerzeren Liste erreicht ist.

    mfG,
    steckl

    1. Hi,

      vielen Dank.

      Ich habs jetzt so gemacht:

      if (!$test[$i]) {
           $test[$i] = 0;
      }

      viele Grüße

      Flo

      1. Ich weiß nicht, was du da vorhast, aber eventuell hilft dir ein Blick in perlfaq4:

        How do I compute the difference of two arrays? How do I compute the intersection of two arrays?

        Siechfred

        --
        Ich bin strenggenommen auch nur interessierter Laie. (molily)
      2. Hi,

        vielen Dank.

        Ich habs jetzt so gemacht:

        if (!$test[$i]) {
             $test[$i] = 0;
        }

        Noch eine kleine Anmerkung hierzu:
        Wenn in $test[$i] der Wert 0 steht ist (!$test[$i]) true, wenn du (!defined($test[$i])) schreiben wuerdest, wuerdest du dir in diesem Fall den Aufruf des if-Zweiges ersparen.

        mfG,
        steckl

  2. Jetzt lasse ich beide Arrays in einer for-Schleife durchlaufen.

    for ($i = 0; $i < @test2; $i++) {
    print $test[$i] . " = " . $test2[$i];
    }

    Macht natürlich keiner in Perl so, da du schönere Möglichkeiten hast eine Schleife zu konstruieren.

    z.b. so

      
    use warnings;  
    use strict;  
    my @test = qw( 1 2 3 4);  
    my @test2 = qw( 1 2 3 4 5);  
      
    for (0...$#test2)  
    {  
    print $test[$_] || 0,  "= $test2[$_]\n";  
    }  
    
    ~~~dazu muss natürlich gewährleitset sein, dass @test immer kleiner als @test2 ist.  
      
    Struppi.
    
    -- 
    [Javascript ist toll](http://javascript.jstruebig.de/) (Perl auch!)