Thread Hash Schlüssel und Werte aus Variablen (1 answers)
Opened by Gast at 2006-10-21 05:17

sid burn
 2006-10-21 06:08
#71058 #71058
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Code: (dl )
1
2
3
4
my %sn_service = {
"$sn" => "$nr",
# $fake_sn => $fake_filnr,
}

Quote
Reference 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:
Code: (dl )
$hash{key}
Damit liest du den Wert aus. Setzen ist auch einfach.
Code: (dl )
$hash{key} = 'value'
.

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.
Code: (dl )
"Hi; blub";foo;bar

1) Hi; blub
2) foo
3) bar


Vielleicht dürfte dieser Code deinen Anforderungen etwas mehr entsprechen.
Code: (dl )
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

View full thread Hash Schlüssel und Werte aus Variablen