|
Thread Tupel in Perl
(35 answers)
Opened by flixxflaxx at 2013-07-20 14:10
Ja sicher doch. Die Linearisierung komplexer Datenstrukturen und die Organisation von Daten in Tupeln ist die Grundlage jeder Serialisierung für den Transport (IO, Sockets, Dateien ...).
MfG Beispiel: $bin = pack("N", length $str).$str; Das ist ein einfacher Tupel für ein Literal, bestehend aus der Längenangabe und dem Literal selbst. Damit können Arrays und Listen serialisiert werden. Wesentlich ist hierbei der Datentyp "32 Bit Integer unsigned" welchen die Packschablone "N" implementiert. Das heißt, daß dieser 32-Bit-Datentyp in Dateien eben eine Länge von genau 32 Bit hat und damit, also mit dem Lesen von genau 4 Bytes exakt wiederhergestellt werden kann. Und damit auch das darauffolgende Literal. Beispiel 2: Zerlege eine Hash in Tupel. Wir haben Key-Value und demzufolge 2 Längenangaben: $bin = pack("N", length $key).pack("N", length $value).$key.$value; Und über den Hash iteriert wiederholt sich das natürlich. Wir sehen also, es ist gar nicht die Frage ob es in Perl einen Datentyp Tupel gibt, sondern die Frage was man unter einem Tupel versteht und wie man dieses Verständnis zweckmäßig anwendet. Wobei ja schon jedes Key/Value Paar einen Tupel darstellt. Zum Serialisieren kommen da nur die Längenangaben hinzu. Anm: Die Schablone "N" steht für Network-Order, Big Endian."V" hingegen steht für Vax, Little Endian. Mit der Festlegung N oder V ist man unabhängig von der Rechnerarchitektur. Dem Algorithmus muss nur bekannt sein ob N oder V. Das ist der Vorteil von Perl gegenüber c, c++ wo integer-Werte > 2 Byte je nach Rechnerarchitektur entweder als little oder Big Endian gespeichert werden. Last edited: 2026-04-07 15:20:38 +0200 (CEST) |