Thread hashes of hashes (6 answers)
Opened by hannesPR at 2010-10-01 03:55

hannesPR
 2010-10-01 03:55
#141602 #141602
User since
2010-10-01
3 Artikel
BenutzerIn
[default_avatar]
hi ich fange gerade erst an mit perl hab aber schon programmier Erfahrung (vor allen C). Mein Ziel ist es ein 2D Matrix von 20 mal 40 Felder auszugeben und das möglichst ohne diese Matrix im den Quell Code eins zu eins abzubilden (das soll skalierbar sein). In C hätte ich so was mit nem 2D array gemacht, Da es das aber in Perl nicht gibt und die Lösungen mit "Array auf Referenzen von Array" nicht infrage kommt weil das erzeugen von dynamischen Array Namen unschön ist. Dachte ich mir ich mach das mit Hashes of Hashes. Im kleinen ausprobiert klappte :D im großen ausprobiert klappte nicht mehr :(. eine halbe Stunde lang den Kopf zerbrochen und mich dann entschlossen das mal der Allgemeinheit zu präsentieren denn ich finde den Fehler nicht.

Code (perl): (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
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/perl -w

#    ___40
#   |   |
# 20|___|

use strict;
my ($i, $ii, %matrix, %asd);

#test
$i=0;
%asd=($i => {$i => " "});
print $asd{0}{0};               #klappt wunderbar
#test

#initialisierung %matrix
for ($i=0;$i<20;$i++)
{
 for ($ii=0;$ii<40;$ii++)
 {
  %matrix=($i => { $ii => "X"});
 }
}
print $matrix{0}{1};            #klappt nicht

main();

sub main
{
for (;;) #main
{
print ("                 Matrix\n");
print ("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n");
for ($i=0;$i < 20;$i++ )
{ 
 print ("x");
 for ($ii=0;$ii < 40;$ii++)
 {
 
 print $asd{0}{0};              #klappt auch wunderbar
 #print $matrix{1}{1}; klappte auch nicht 
 }
 print ("x\n");
}
print ("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n");
sleep(1);
}
}

Fehlermeldung:
Use of uninitialized value in print at ./cursor.pl line 24.
(wer die selber sehen will sollte main() auskommentieren sonst verschwindet die gleich wieder)
perl -v:
This is perl, v5.10.0 built for i486-linux-gnu-thread-multi

Das ganze dient für mich dazu Perl zu lernen bzw. nen Einblick zu bekommen also bitte keine fragen nach dem warum.
Ich vermute das sich da irgend welche Speicher Bereiche überschreiben da das ganze klappt wenn die beiden for schleifen jeweils nur einmal durchlaufen. Das kommt mir aber recht unwahrscheinlich vor, das so nen Fehler unentdeckt geblieben wäre deswegen ist es wohl doch mein Unvermögen :D.
Hoffe auf hilfreiche Antworten.
Last edited: 2010-10-01 09:00:27 +0200 (CEST)

View full thread hashes of hashes