my %sn_service = {
"$sn" => "$nr",
# $fake_sn => $fake_filnr,
}
QuoteReference found where even-sized list expected at D:\perl\hash.pl line 27, <SERVICE> line 920.
Du erstellst ein Hash mit "my %sn_service". Um ein Hash zu füllen musst du eine Liste zuordnen. Das geht mit runden Klammern.
Mit geschweiften Klammern erzeugst du eine Referenz auf ein anonymes Hash. Dieses Speicherst du üblicherweise in Skalare.
Zum anderen denke ich aber das du nicht das haben möchtest was dein Code macht. Dein Code erzeugt mit jedem Schleifendurchlauf ein neues Hash, speichert dort etwas, und danach wird es wieder verworfen.
Du musst also das Hash vor der while Schleife erzeugen, und nicht in der while Schleife.
Auf einen einzelnen Wert im Hash greifst du folgendermaßen zu:
Damit liest du den Wert aus. Setzen ist auch einfach.
.
Sollte der "key" beim Setzen nicht existieren, wird er automatisch angelegt. Das letzt ist also auch gleichzeitig ein Beispiel wie du neue Werte einem Hash hinzufügst.
Ansonsten sei noch angemerkt das es nicht Ausreicht die Werte einer CSV Datei mit einem split() zu trennen. Folgende Zeile ist eine gültige CSV Zeile und enthält 3 Werte.
1) Hi; blub
2) foo
3) bar
Vielleicht dürfte dieser Code deinen Anforderungen etwas mehr entsprechen.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my %sn_service;
while ( defined(my $line = <DATA>) ) {
my ($nr, $sn) = (split /;/, $line)[0,6];
chomp ($nr, $sn);
$sn_service{"$sn"} = $nr;
}
print Dumper \%sn_service;
__DATA__
hallo;welt;wie;geht;es;dir;heute
hi;mir;scheint;es;heute;gut;zu
gehen;danke;der;nachfrage;was;macht;die
CSV Dateien werden aber auch in diesem Beispiel nicht korrekt verarbeitet.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de