Thread Übergabe Hash-Struktur an Methode
(33 answers)
Opened by mtbf40 at 2015-05-19 15:44
Ich hab' das erstmal in ein Skript gepackt und die Einrückungen (hoffentlich) lesbarer gemacht:
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 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 #!/usr/bin/perl use warnings; use strict; use Data::Dumper; package childmodul; sub new { my ($class, $hsh_scriptParam) = @_; my @caller = caller(0); my $self; $self = { %{$hsh_scriptParam} }; 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 { return -1; } } } package main; 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}, Loglevel => 'höher geht nicht', RootPath => 'ganz oben' || '???', StartTime => 'am Anfang' || '???', }, DBParam => {RegPar => 'test', dbSession => {ApplName => 'testhash', Action => 'insert', runtime => {dbTable => 'INIT_REG'} } } }; my $Object1 = childmodul->new($hsh_runtimeParam); $Object1->set_Data(block => {test => [ 'DBParam', 'dbSession', 'runtime' ]}, key => 'dbTable', wert =>'INIT_RUN'); Jetzt ist die Frage, ob Du mit dieser allzu komplexen Hash-Struktur arbeiten mußt (weil sie so von woanders her kommt). Wenn nicht, würde ich das Ganze erheblich weniger verschachteln. Möglicherweise auch eine eigene Klasse für diese Werte machen (anstatt alles in einen Hash zu tun). |