Thread Verschwinden des Arrays (3 answers)
Opened by Alexander at 2016-05-04 14:45

jan
 2016-05-04 16:04
#184684 #184684
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
Meine Vermutung ist: foreach setzt $_ auf eine Referenz auf das jeweilige Array-Element.
Anschließend setzt die while-Schleife $_ jeweils auf die Zeile, die gelesen wird. Wenn es keine weiteren Zeilen mehr gibt, gibt <OEFFNEN> undef zurück, und darauf wird dann auch $_ gesetzt, was sich wiederum auf das Array-Element auswirkt.

Wenn Du genau hinschaust, siehst Du auch, dass dein Array nicht leer ist, sondern anstelle der Dateinamen mehrere Leerzeichen kommen: mehrere undefinierte Elemente, getrennt durch Leerzeichen.

Lösen kannst Du es auf verschiedene Arten:
die while-Schleife
Code (perl): (dl )
1
2
3
        while (my $tmp = <OEFFNEN>) {
                push @zeilen, $tmp;             
        }


in diese Art zu ändern, sollte helfen.

Grundsätzlich finde ich es immer hilfreich, nicht $_ zu nutzen. Einerseits wegen manchen Merkwürdigkeiten wie Du sie gerade hast, aber auch weil ich explizite Dinge im Code mag, die jedem sofort sagen, was hier passiert und was in welcher Variablen gerade steckt. Ergo würde ich das auch mit
Code (perl): (dl )
for my $datei (@dateien){

schreiben.
Zum ausgeben vom Variableninhalt empfehle ich dir CPAN:Data::Dump's pp anstatt sie einfach in einen string zu packen.
Oben:
Code (perl): (dl )
use Data::Dump qw(pp);

und unten dann
Code (perl): (dl )
pp(@dateien);


Das gibt bei mir im "Problemfall"
Code: (dl )
(undef, undef)
und mit dem obigen Fix dann
Code: (dl )
("jan.csv", "jan2.csv")
.

View full thread Verschwinden des Arrays