Thread Übergabe Hash-Struktur an Methode
(33 answers)
Opened by mtbf40 at 2015-05-19 15:44
Hallo,
ich drehe mich bei folgenden Problem im Kreis! - ich habe einen geschachtelten Datenhash - es wird eine Klasse erstellt und diese in einer Variablen gespeichert ($Object1) 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 49 50 51 52 53 54 55 56 #!/usr/bin/perl use 5.020; #damit Neuerungen ab Perl 5.012 ohne - use feature ... - verwendet werden #lädt auch gleich >>use strict<< mit use strict; use Data::Dumper; use pck_test::childmodul; # Datenuebergabestruktur vorbereiten. # Die Klasse initialisiert auf Standardwerte, so dass man nur die Daten angeben muss, # die andere Werte bekommen sollen my $hsh_runtimeParam = { ScriptParam => { ScriptName => $0 || '???', Version => 'v.01' || '???', Hilfe => { Usage => 'ruf mich mal richtig auf', Message => 'rufe mal nach Mutti' }, }, Runtime => { ApplName => 'TestClass', Caller => $^O =~ /win32/i ? $ENV{USERNAME} : $ENV{USER}, # Username der dieses Script gestartet hat Loglevel => 'höher geht nicht', RootPath => 'ganz oben' || '???', StartTime => 'am Anfang' || '???', }, DBParam => { RegPar => 'test', dbSession => { ApplName => 'testhash', Action => 'insert', runtime => { dbTable => 'INIT_REG' } } } }; # Objektinstanz der Childklasse erzeugen # dabei auch gleich gewuenschte neue Initialwerte uebergeben my $Object1 = childmodul->new($hsh_runtimeParam); $Object1->set_Data( #block => \$Object1->{DBParam}->{dbSession}->{runtime}, block => {test => [ 'DBParam', 'dbSession', 'runtime' ]}, key =>'dbTable', wert =>'INIT_RUN' ); print Dumper $Object1; - die Übergabemethode sieht folgendemassen aus - childmodul.pm 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 49 50 51 52 53 54 55 56 57 58 #/opt/bin/perl use strict; package childmodul; sub new { my ($class,$hsh_scriptParam) = @_; # Hash mit der Übergabestruktur uebernehmen my @caller = caller(0); my $self; $self = { %{$hsh_scriptParam} }; # Die Funktion bless() verknüpft ein Objekt mit einem Packagenamen (Binden eines Objekts an eine Klasse) bless $self, $class; $self; } sub set_Data() { use Data::Dumper; my $self = shift; # eigene Klassenreferenz holen my $args = {@_}; # Parameterliste in Hash umwandeln my $wert; if (ref($args->{block}) eq 'HASH') { no strict 'refs'; print Dumper $self->{$args->{block}}; print Dumper $args->{block}->{test}; for (@{$args->{block}->{test}}) { $wert .= '{'.$_.'}'."->"; } $wert .= '{'.$args->{key}.'}'; print "wert= $wert\n"; my $wert1 = \$wert; print "wert1= $$wert1\n"; print "wert1= $self->{${$wert1}}\n"; if ( exists($self->{$wert}) ) { # Key existiert --> Wert setzen $wert.'{'.$args->{key}.'}' = $args->{wert}; return 0; } else { # Fehler zurückgeben: Key existiert nicht in der Datenstruktur return -1; } } } 1; wie bekomme ich das "zusammengebastelt", dass $self->???? ausgewertet werden kann???? modedit Editiert von GwenDragon: Bitte korrekten BBCode beachten! Siehe /bat/poard/markup_help/ Editiert von mtbf40: Code Beispiel lauffähig gemacht Last edited: 2015-05-20 08:59:45 +0200 (CEST) |