opi: Datenstrukturen über Sockets

Beitrag lesen

Hallo zusammen,

kann man über Internet Domain Sockets auch Datenstrukturen übertragen?

Ich erzeuge mit IO::Socket::INET eine Client-Server Verbindung.
Nun möchte ich vom Server zum Client beispielsweise eine
Datenstruktur übergeben. In meinem Fall wäre das eine Hashreferenz
mit weiteren Referenzen auf Hashes und Arrays.

Ich weiß, dass diese Struktur im Speicher liegt, aber gibt es
hier vielleicht eine Möglichkeit, die Daten so auszugeben, dass
der Client die Datenstruktur mit

server: print $client $data;
client: my $data = <$server>;

erkennt und auch so wieder im Speicher ablegt? Oder bin ich dazu
gezwungen, die Daten in $data mit einer Schleife zu Bearbeiten?

Darüber hinaus wüßte ich gerne noch etwas anderes.

Ich habe mir eine Subfunktion gebastelt, der ich als Argument einen
Hash übergebe, damit die Subfunktion weiß, was genau Sie machen soll.

Der Hash ist sehr simple und in der Subfunktion wird nur nach der
Existenz bestimmter Schlüssel gesucht. Existiert ein bestimmter
Schlüssel - der Wert des Schlüssels ist vollkommen unwichtig -
wird etwas weiteres angestoßen. Hier ein Beispiel:

my $hash = {
   "key1" => 1,
   "key2" => 1,
   "key3" => 1,
}

An dieser Stelle meine Frage: gibt es eine andere Möglichkeit,
einen Schlüssel zu erzeugen? So zu sagen das Gegenteil von delete?

my $r = func($hash);

sub func {
   my $q = shift;
   my $r = {};
   if (defined $q->{key1}) {
       $r->{key1} = { func_key1() };
   }
   if (defined $q->{key2}) {
       $r->{key2} = { func_key2() };
   }
   if (defined $q->{key3}) {
       $r->{key3} = [ func_key3() ];
   }
   return $r;
}

Jetzt weiß ich nicht, ob das die übliche Art ist, um bestimmte
Ereignisse anzustoßen oder ob es "bessere" Methoden gibt. Vielleicht
scheint ein Hash hierfür vollkommen fehl am Platze.

Für Hilfe wäre ich echt dankbar.

Bis dann.

Greez,
opi

--
Selfcode: ie:( fl:( br:^ va:) ls:] fo:) rl:( n4:? ss:| de:] ch:? mo:|