Thread Übergabe Hash-Struktur an Methode (33 answers)
Opened by mtbf40 at 2015-05-19 15:44

hlubenow
 2015-05-20 12:11
#181100 #181100
User since
2009-02-22
875 Artikel
BenutzerIn
[default_avatar]
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).

View full thread Übergabe Hash-Struktur an Methode