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

Raubtier
 2016-05-04 17:47
#184685 #184685
User since
2012-05-04
1052 articles
BenutzerIn

user image
Mehrere Punkte:
Allgemein:
* 3-Argumente-Form von open nehmen (hatten wir neulich gerade ausführlich hier / sicherer, besser, close wird verzichtbar)
* use strict und use warnings einsetzen!

Und zu deinem Problem: Wie Jan vermutet hat: Perl liebt Referenzen!

D.h. folgendes gibt dir 3x "irgendwas" aus:
Code (perl): (dl )
1
2
3
my @arr1 = ( 1, 2, 3);
for (@arr1) { $_ = "irgendwas"; } 
print "@arr1\n";


Also: nicht 2x dieselbe Variable (hier $_) für unterschiedliche Dinge nutzen! (Es gibt allerdings noch das Keyword local, das das ganze beeinflusst und in foreach-Schleifen ist die Loop-Variable implizit local -> siehe Perldoc:perlsyn)

Also: es kostet nix, die äußere Variable $filename zu nennen und die innere $line. Oder auf die innere Loop ganz verzeichten: push @zeilen, <OEFFNEN>;

Insgesamt (ungetestet):
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
use strict;
use warnings;

my @zeilen;
my @dateien = glob "*.csv";
for my $filename (@dateien) {
    open my $FH, "<", $filename or die "\n\nProblem beim oeffenen von $filename . $! \n";
    push @zeilen, <$FH>;
}

View full thread Verschwinden des Arrays