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

Linuxer
 2019-02-03 23:00
#189696 #189696
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sub lesen_var_referenz {
my ($keys) = @_;

my $empf;
my $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;
}


Davon, dass Du hier einen Socket verwendest, war anfangs nicht die Rede....

Du schickst einen Datenstrom via Socket raus und empfängst einen Datenstrom.
Letzten Endes ist das eben ein String; hier anscheinend eine Referenz auf eine Hash, aber eben in der stringifizierten Form...

Sind das zwei unabhängige Programme?
Selbst wenn die Referenz auf den Hash als solche durchkommen würde, wie soll das zweite Programm auf Speicherbereiche des ersten Programms zugreifen???
Ich gestehe, ich habe wenig Erfahrung mit Socket-Programmierung oder tieferer Inter-Prozess-Kommunikation. Aber meiner bescheidenen Meinung nach dürfte das so nicht funktionieren.

Ich denke, wenn Du auf 'mpi' unter 'SYS_verz_meldung_max_differenz_rrm' zugreifen willst, dann teile das via Socket mit und empfange den Dateninhalt.

Code: (dl )
my $data = fetch_from_socket( 'SYS_verz_meldung_max_differenz_rrm', 'mpi' );


Das heisst, Du überträgst per Socket die relevanten Keys und Unter-keys, greifst beim Empfänger darüber auf die gewünschten Daten zu und schickst diese über den Socket zurück.

Wenn Du komplexere Strukturen übertragen willst, musst Du wohl, wie von rosti schon angedeutet wurde, einen Serializer zwischenschalten, um die Struktur via Socket zu übertragen und danach eben wieder de-serialisieren, um sie dann als Datenstruktur weiterzuverwenden.
Last edited: 2019-02-03 23:02:41 +0100 (CET)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Hashreferenz bearbeiten