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
sub join_raw{ sort_datasets($#{$testliste[0]}-1); cut_column(-1); # Indexspalte löschen cut_column(-1); # laufende Nummer löschen @testliste = (@testliste,@_); add_column("extensions"); } sub join_sto{ my $dateiname = shift; sort_datasets($#{$testliste[0]}-1); cut_column(-1); # Indexspalte löschen cut_column(-1); # laufende Nummer löschen my @temp = @testliste; @testliste = (); load_sto($dateiname); cut_column(-1); # Indexspalte löschen cut_column(-1); # laufende Nummer löschen @testliste = (@temp, @testliste); add_column("extensions"); } sub join_txt{ my $dateiname = shift; sort_datasets($#{$testliste[0]}-1); cut_column(-1); # Indexspalte löschen cut_column(-1); # laufende Nummer löschen my @temp = @testliste; @testliste = (); load_txt($dateiname); cut_column(-1); # Indexspalte löschen cut_column(-1); # laufende Nummer löschen @testliste = (@temp, @testliste); add_column("extensions"); }
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
sub join { my $art = shift; sort_datasets($#{$testliste[0]}-1); cut_column(-1); # Indexspalte löschen cut_column(-1); # laufende Nummer löschen if ($art eq "txt" or $art eq "sto"){ my $dateiname = shift; my @temp = @testliste; @testliste = (); load_sto($dateiname) if $art eq "sto"; load_txt($dateiname) if $art eq "txt"; cut_column(-1); # Indexspalte löschen cut_column(-1); # laufende Nummer löschen @testliste = (@temp, @testliste); } else { @testliste = (@testliste,@_) } add_column("extensions"); }
%common = (%aus_DB, %aus_Datei);
QuoteUnd dieses Modul wird vom Frontend per Funktionsaufrufen gesteuert - und die Frage ist, oder war, inwieweit man da Funktionen zusammenfassen sollte oder wie man diese Funktionen also am zweckmässigsten vom Frontend aus gesehen darstellen sollte.
tie @rray, 'ArrayClass';
1 2 3
tie my @book, 'Prosa', genre => 'Gute Nacht Geschichten'; read $book[0]; say 'good night';
2014-01-20T09:06:02 MuffiAlso mit tie würd ich sehr vorsichtig sein.
Es gibt sehr wenig Fälle wo tie mehr nützt als verwirrt.
QuoteViel Spaß mit Perl ;)
QuoteDann noch: verwende keine globalen Variablen....
2014-01-19T19:05:38 der_thomasMir erscheint es allerdings etwas eigenartig, wenn ein Frontend genau einen Datensatz zur Ausgabe bekommen soll - und dazu dann auch noch das komplette Array mitgeliefert bekommt, nur damit dieses dann beim Aufruf der nächsten Funktion wieder mitgegeben wird << dies alles nur um eine globale Variable zu vermeiden ?
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
Frontend.pl Modul.pm
*************************** ********************************
* I/O z.B. per Konsole * * Array hier global *
* * * zeiger hier global *
*-------------------------* *------------------------------*
* * * *
* lade Datei xy ----------load txt(xy)---> * Array = Datei xy #(10,20,30) *
* * * zeiger = 0 *
* * * *
* * * *
* * * *
* get first (record) --------------get first--> * temp = Array[zeiger]--\ *
* print temp #10 * <-------(temp)------------------------------/ *
* * * *
* * * *
* * * *
* temp = 4; put temp --------------put(temp)--> * Array[zeiger] = temp *
* * * # Array[0] = 4 *
* * * *
* * * *
* get next ----------------------get next---> * zeiger ++ *
* * * temp = Array[zeiger]--\ *
* print temp #20 * <-------(temp)------------------------------/ *
* * * *
*************************** ********************************
|Array und zeiger sind nur hier|
|sicht- und veränderbar. |
--------------------->
in diese Richtung wandern nur Funktionsaufrufe und ggf. veränderte Datenstätze
<---------------------
in diese Richtung wandern nur Kopien einzelner Datensätze
QuoteTja, dann werde ich mich mal an OOP herantasten, zuerst kommen aber die Hashes dran, um die ich bisher einen Bogen machte ;)
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
Frontend.pl Modul.pm
*************************** *********************************************
* I/O z.B. per Konsole * * Array Objekt variable *
* * * zeiger Objektvariable *
*-------------------------* *-------------------------------------------*
* * * *
* $obj = lade Datei xy --------Modul->load txt(xy)----> * $self=bless("Modul",{}) *
* ^ * * $self->{Array} = lade Datei xy *
* | * * $self->{zeiger} = 0 *
* \--<--------------------------($self)-----------------/ *
* * * *
* * * *
* * * *
* $obj->get first (record) --------------get first----> * temp = $self->{Array}[$self->{zeiger}]--\ *
* print temp * <-------(temp)--------------------------------------------------------/ *
* * * *
* * * *
* * * *
* temp = 4; $obj->put temp --------------put(temp)----> * Array[$self->{zeiger}] = temp *
* * * # Array[0] = 4 *
* * * *
* * * *
* $obj->get next ----------------------get next-----> * $self->{zeiger} ++ *
* * * temp = $self->{Array}[$self->{zeiger}]--\ *
* print temp * <-------(temp)--------------------------------------------------------/ *
* * * *
*************************** *********************************************
2014-01-21T19:44:20 der_thomasIrgendwie freut mich das ja, weil es meine damalige Vorgehensweise zu bestätigen scheint, aber ist das qualitativ wirklich besser ?
Ich meine nein, denn der Zeiger ist in der Instanz genauso global wie in meinem Perlmodul.
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
package Class; @liste =( ["Perl", "dyn", "Wall"], ["Java", "stat", "Gosling"], ["C#", "stat", "Hejlsb."], ["Python", "dyn", "Rossum"], ["C++", "stat", "Stroust."], ["Basic", "stat", "Kurtz"], ["Obj C", "stat", "Love"], ["Eifel", "stat", "Meyer"], ["Ruby", "dyn", "Mats"], ["PHP", "dyn", "Lerdorf"] ); my $listref = \@liste; sub new { my $classname = shift; my $self = { zeiger => 0, maxspalte => 2, #feste Anfangswerte nur hier zum Testen maxzeile => 9, #feste Anfangswerte nur hier zum Testen daten => $listeref }; return bless($self, $classname); }
QuoteUnd wenn mans dann mit einigen Hacks wirklich geschafft hat alles unter einen Hut zu bringen ändert sich irgendwo eine Vorgabe und das ganze feinoptimierte Konstrukt bricht zusammen.