@SchaubFD: Dein Parsen der CSV-Datei ist nicht sehr robust. Was ist, wenn ein Feld ein ';' enthält? Oder eingebettete Zeilenumbrüche? Nimm lieber Text::CSV bzw. Text::CSV_XS dafür.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use Text::CSV_XS; # die schnellere Variante, auf C-Code basierend
sub lese_email {
my ($datei) = @_;
my @email;
my $csv = Text::CSV_XS->new ({
sep_char => ';', # Feldtrenner ist Semikolon
binary => 1, # auch Nicht-ASCII-Zeichen erlauben, z.B. Umlaute, UTF-8
});
open my $datei_fh, "<", $datei or die "Kann $datei nicht oeffnen: $!";
$csv->getline($datei_fh); # Kopfzeile parsen, aber nicht speichern
while (my $zeile = $csv->getline($datei_fh)) {
my %zeilenhash;
# Hash fuellen ueber Hash-Slice:
@zeilenhash{ qw/kostenstelle kostenstellenname kostentraeger
kostentraegername konto kontoname email name/ } = @$zeile;
push @email, \%zeilenhash;
}
close $datei_fh;
return @email;
}
(ungetestet)
Und wo du schon von Datenbanken sprichst: Mit DBD::CSV kann man auch eine CSV-Datei wie eine Datenbank ansprechen und mit SQL-Befehlen bearbeiten. :-)