Thread Hashreferenz bearbeiten (19 answers)
Opened by worst_case at 2019-02-02 21:34

worst_case
 2019-02-03 11:33
#189690 #189690
User since
2007-08-18
46 Artikel
BenutzerIn
[default_avatar]
Hallo,

hier einmal die Zusammenhänge.

1. database (daemon) enthält alle hashdaten

2. Funktionslib (database_tools.pm)
Hier sind Funktionen mit denen die hashdaten in der "database" gelesen
und beschrieben werden können.
Hier ist auch die sub "lesen_var_referenz"

- In meinem "Abfrageprogramm" (hier benötige ich die referenz)
rufe ich die sub "lesen_var_referenz" (database_tools) mit dem Parameter
"variablenname" auf (von dieser Variable benötige ich die Referenz)

- Diese Funktion "lesen_var_referenz" (database_tools) ruft in der
"database" gleichnahmige funktion "lesen_var_referenz" per
socketverbindung auf.

Abfrageprogramm -> "lesen_var_referenz"(database_tools) -> "lesen_var_referenz" (database)

Code: (dl )
1
2
3
  my $var_ref = lesen_var_referenz('SYS_verz_meldung_max_differenz_rrm');
print $var_ref."\n";
print $var_ref->{mpi};


## datatool.pm ##
## In dieser lib sind Funktionen um auf die hashdaten per socketverbindung zugreifen zu können.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sub lesen_var_referenz
{
my ($keys) = @_;
my $socket;
my $empf;

$socket = new IO::Socket::INET (
PeerAddr => $database_data::hostname,
PeerPort => $database_data::port,
Type => SOCK_STREAM,
Proto => 'tcp'
); die schreibeLogeintrag("Unable to setup socket: $! im Script '$0'\n") unless defined $socket;

$socket->send("lesen_var_referenz $keys");
$socket->recv($empf,8196);
return $empf;
}


# database
# selbst ausführendes Programm (daemon), das alle hasdaten verwaltet.
# Alle Daten werden von Funktionen der database_tools (lib)
# über socketverbindungen hier manipuliert
#
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
sub lesen_var_referenz
{
my ($newsock,$variablenname) = @_;

if (exists $daten{$variablenname})
{
# $daten->name
# $daten->name->mpi
# $daten->name->wert
# $daten->name->typ
# $daten->name->db
# $daten->name->byte
# $daten->name->bit
# $daten->name->format

$newsock->send($daten{$variablenname});
}
else
{ &schreibeLogeintrag("Schluessel:".$variablenname." wurde im Script $0 in der Funktion: \"lesen_var_referenz\" nicht gefunden\n");}
}


aktuell funktioniert
========================
$newsock->send($daten{$variablenname}{format});
print $var_ref;

das richtige Ergebnis kommt an.


$newsock->send($daten{$variablenname});
print $var_ref->{mpi};

das geht nicht.


Danke
Last edited: 2019-02-03 13:50:37 +0100 (CET)

View full thread Hashreferenz bearbeiten