Schrift
[thread]5057[/thread]

TK - Auslagern?: ge-bind-ete Routinen auslagern



<< >> 5 Einträge, 1 Seite
jemand
 2005-08-17 19:45
#44386 #44386
User since
2004-05-14
231 Artikel
BenutzerIn
[default_avatar]
Hi,
also irgendwie komm ich grad absolut nicht weiter. Wahrscheinlich wieder was in der Art wie: 'Doofe Bäume, wo ist der Wald hin??'&…
Also ich hab ein MainWindow, das dann ein TopLevel erzeugt, in welchem Eingabefelder sind. Nach dem Drücken des OK-Buttons, welcher auch im TL ist, sollen die Eingaben in Programmübergreifende Variablen gepackt werden und das TL zerstört werden. Das ganze wäre ja eigentlich kein Problem, da man in der an den Button gebundenen Subroutine auch auf die Variablen zugreifen können müsste. Dies ist aber nicht der Fall, da ich die Subroutine (wie auch alle anderen) in ein(bzw. mehrere) Modul(e) auslagern möchte, das dann ge-use-d wird. Somit dürfte ich die Variable nicht mit my deklarieren, da sie sonst nicht im Modul sichtbar ist. Ich möchte sie aber auch nicht im Modul mit our deklarieren weil sie eventuell auch in anderen Subroutinen anderer Module genutzt werden soll. Mit require ist es ja das selbe: Auch hier kann in Subroutinen nicht auf die Variablen, welche im Hauptprogramm mit my deklariert wurden zugegriffen werden.
Somit zur eigentlichen Frage: Wie bring ich den Wert in die Variable ohne dass strict nörgelt?
bzw.: (Wie) Lagert ihr euren Code bei größeren (TK-)Projekten aus?

Jemand
print uc 'i',chr(29*4).q+'s +.++($_=q-m-),++$_;
print chr for 116,$_[0],97,$_[0],98;
print 'ug,',chr(), scalar reverse qq?!erutaef a s'ti?;
Strat
 2005-08-17 20:03
#44387 #44387
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
vielleicht ein eigenes package mit globalen variablen machen, und die dann immer voll ansprechen?
Code: (dl )
1
2
3
4
5
6
7
8
9
10
package MyPackage::Global;
use vars qw($ThisGlobalValue);
$MyPackage::Global::ThisGlobalValue = "irgendwas";

.....
package MyPackage::Callbacks;
sub ChangeThis {
my ($widget, $index) = @_;
$MyPackage::Global::ThisGlobalValue = $widget->value($index);
}

oder was auch immer
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Strat
 2005-08-17 20:12
#44388 #44388
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
sonst gibt es bei mir mehrere Dateien mit unterschiedlichen packages; wenn das Projekt z.B. PBX heisst, dann wuerde ich mir z.B. den Sinn folgender Aufteilung ueberlegen:

PBX::Widgets: Wrapper um die Tk-Widgets, damit ich denen gleich Standardwerte verpassen kann wie z.B. hintergrund, font, ...

PBX::Forms: hier erzeuge ich das Layout

PBX::Callbacks: hier stehen die ganzen Callbacks drinnen (oder zumindest die, die nicht in anonymen subroutinen abgehandelt werden

PBX::DB: Wenn ich z.B. auf eine Datenbank zugreifen muss, dann kommt der Code, der mit der DB kommuniziert, dort hinein und wird dann von den anderen Stellen aus aufgerufen

PBX::Config: fuer die Konfiguration; dafuer verwende ich meistens globale Variablen (die allerdings readonly)

PBX::Global: das sind globale bind-Variablen, oder komplexere Datenstrukturen, in denen ich die ganzen Widgets hierarchisch speichere, damit ich ueberall einfach drankomme
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
jemand
 2005-08-18 00:39
#44389 #44389
User since
2004-05-14
231 Artikel
BenutzerIn
[default_avatar]
Danke, werds mal so versuchen.
theorethisch ginge aber auch aus der subroutine dann $main::variable, oder doch nicht?
Muss man die dann nicht auch mit our deklarieren oder gibt our einfach zugrif durch das package hindurch?
print uc 'i',chr(29*4).q+'s +.++($_=q-m-),++$_;
print chr for 116,$_[0],97,$_[0],98;
print 'ug,',chr(), scalar reverse qq?!erutaef a s'ti?;
Strat
 2005-08-18 14:20
#44390 #44390
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
an "globalen" Variablen kommt man immer ueber packagename::variable dran; wenn du sie mit
our $Var;
oder:
use vars qw($Var);
deklarierst, sagst du perl nur, dass du sie im aktuellen Namensraum als $Var ansprechen willst... zusaetzlich jedoch kannst du sie auch immer ueber $...packagename...::Var ansprechen, egal von wo

theoretisch ginge auch $main::variable oder sogar kuerzer $::variable, aber ich verwende main nicht so gerne, weil es irgendwie bei mir recht haeufig vorkommt, dass zwei Tk-Applikationen zu einer zusammengeworfen werden, und da aendern sich dann die packagenamen... und wenn beide viel main verwenden, ist sowas recht mueseelig zum auseinanderdroeseln... also lasse ich da main nur sehr kurz sein...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 5 Einträge, 1 Seite



View all threads created 2005-08-17 19:45.