Schrift
[thread]7719[/thread]

%hash = $hash{$key} möglich?

Leser: 4


<< >> 4 Einträge, 1 Seite
pearl-man
 2006-02-19 16:28
#63091 #63091
User since
2005-07-25
65 Artikel
BenutzerIn
[default_avatar]
Habe mehrere Hashes mit gültiges Keys (Wörter) und jeweils einem Value, das entweder '0' ist oder den Namen eines weiteren Hashes (z.B. %weitere) enthält. Die Keys der Hashes bilden am Ende einen Satz. Folgender Code:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
...

# die hashes:
%inst_base = (  "von MS Office XP Professional auf" => %pcs,
               "von Adobe Creative Suite auf" => %pcs_macs,
               "von Adobe GoLive auf" => %pcs_macs,
               "von MS Windows 2000 Professional auf" => %pcs);

%pcs = (    "WORTMANN PC: P4, 3Ghz, 512MB Ram" => 0,
               "Acer Aspire PC: AMD64 3200+" => 0,
               "Sony VAIO Notebook FS1" => 0,
               "Sony VAIO Notebook FS2" => 0);

%macs = (  "Apple iMac G4 700MHz" => 0,
               "Apple iMac G5 20-Zoll" => 0,
               "Apple iMac G5 17-Zoll" => 0,
               "Apple PowerMac G5 Dual 2,5GHz" => 0,
               "Apple PowerMac G5 Quad 2,5GHz" => 0,);

%pcs_macs = (%pcs, %macs);

# der code...
while ($weiter){
@temp = keys %hash;
$cur_key = $temp[rand @temp];
$satz.= " $cur_key";
if ($hash{$cur_key}){
       %hash = $hash{$cur_key};
} else {
       $weiter = 0;
}
}

print "\n$satz\n";
...


Ausgabe ist dabei aber leider folgende:

Code: (dl )
1
2
3
Odd number of elements in hash assignment at ./ber.pl line 57.

von MS Office XP Professional auf von Adobe Creative Suite auf


kurz gesagt, es hängt an folgender Zeile:

Code: (dl )
 %hash = $hash{$cur_key};


ist solch eine Zuweisung überhaupt realisierbar?

mfg
pearl-man
 2006-02-19 16:58
#63092 #63092
User since
2005-07-25
65 Artikel
BenutzerIn
[default_avatar]
okay, hab jetzt die Hashes etwas anders definiert:
Code: (dl )
1
2
3
4
5
6
...
%inst_base = ( 'von MS Office XP Professional auf', \%pcs,
'von Adobe Creative Suite auf', \%pcs_macs,
'von Adobe GoLive auf', \%pcs_macs,
'von MS Windows 2000 Professional auf', \%pcs);
...


doch nun sieht die Ausgabe so aus:

Code: (dl )
1
2
Reference found where even-sized list expected at ./ber.pl line 59.
von MS Office XP Professional auf HASH(0x8160218)


?
pearl-man
 2006-02-19 17:01
#63093 #63093
User since
2005-07-25
65 Artikel
BenutzerIn
[default_avatar]
okay habs schon gelöst:

Code: (dl )
1
2
3
...
%hash = %{$hash{$cur_key}};
...


mfg
esskar
 2006-02-20 16:33
#63094 #63094
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
schön schön...
aber vielleicht empfiehlt es sich, mit der hash-referenz weiter zu arbeiten anstatt den hash zu kopieren
<< >> 4 Einträge, 1 Seite



View all threads created 2006-02-19 16:28.