|
|
 |

|

 |

| Community » Perl: Allgemeines Forum |
|
Perl anonyme Subroutine
|
Seitenanfang |
| Hallo zusammen, der folgende Code will nicht compilieren: while ($y<11) { $i='1'; $x='10'; while ($i<11) { $W2->AddButton( ##Button Namen: FELD[ZEILE][POSITION] BSP: FELD01 == Links oben -name => "Feld$y$i", -text => " ", h -picture => $bgblau, -pos => [ $x, $z ], $feld="Feld$y$i"; sub $feld_Click { $W2->$feld->SetImage($bgblack); } ); $i=$i+1; $x=$x+18; }; $z=$z+20; $y=$y+1; } Ich will mit Hilfer der win32::gui ein Spielfeld mit buttons erstellen und diesen Buttons jeweils die gleiche Aktion zuweisen. Um Aufwand zu sparen möchte ich das alles in einer Schleife abarbeiten. Dabei renne ich jedoch in einen Fehler, das die Sub illegal deklariert sei - wie könnte man das lösen???
Datum: 25.10.2005-09:45

|
re: Perl anonyme Subroutine
|
Seitenanfang |
$feld="Feld$y$i"; sub $feld_Click { $W2->$feld->SetImage($bgblack); }
ich habe nie mit dem modul gearbeitet, aber das klappt nicht, weil $feld_Click kein gültiger name für eine sub ist. wenn du eine variable in dem namen verwenden willst, müsstest du mit eval arbeiten. beispiel: eval('sub ' . $feld . '_Click {$W2->$feld->SetImage($bgblack);}');
besser wäre wahrscheinlich aber eine referenz auf die sub, aber da ich das modul nicht kenne, weiß ich nicht, ob und wie man bestimmte events zuweisen kann. poste doch mal mehr code, wenn's mit eval nicht hinhaut.
Datum: 25.10.2005-14:31

|
re: Perl anonyme Subroutine
|
Seitenanfang |
| Danke für den Ansatz - das geht soweit auch durhc den compiler - bringt aber den Nachteil, das die Action direkt beim Aufruf der Zeile ausgelöst wird. Der Code soll ein Feld von Buttons erzeugen - und wenn man einen button drückt soll sich die Farbe ändern. Das macht normalerweise die Sub. Nun wird Sie aber direkt ausgeführt. D.h. alle Buttons sind Gedrückt... Problem verstanden??? Wieso führt er das eval so aus als hätte man schon geklickt???
Datum: 25.10.2005-19:01

|
|

|

|

|
 |

|

|
|