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

mtbf40
 2015-05-19 15:44
#181088 #181088
User since
2010-06-03
17 Artikel
BenutzerIn
[default_avatar]
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)

View full thread Übergabe Hash-Struktur an Methode