Moin!
Das erzeugt eine bin.Sequenz, die z.B. per AJAX als ArrayBuffer angefordert wird. Je nachdem, wie die Atome zusammengesetzt sind, kannst Du Arrays, Hashes oder Hashes of Hashes erzeugen, was daraus wird, entscheidet nur der Algorithmus. in der Binsequenz ist also als BigEndian 'N', kodiert, wie lang die Bytefolge ist und in einem Byte 'C' steht drin, ob der Wert undef (Perl) oder null (JS) ist.
Wie ich schon schrieb. Kümmere Dich mal um JSON. Es macht vieles von dem obsolet. Perl kann JSON kodieren und dekodieren, in Javascript ist es nativ.
Naja, wg. 0x0..0xFF, da meinst Du wohl eher BSON. Aber soviel anders als bei mir (s. Atom), sieht da eine BinSequenz auch nicht aus, siehe bei Ruby und das Grundanliegen einer Serialisierung ist im Prinzip dasselbe: Längenangaben kodieren. Was heißt, dass bei der Umkehrung entweder ein Handle oder ein String durchlaufen werden muss.
Mit einem read(Handle,,); merkt sich Perl die Position, darauf kommt es an. Einen String auf diese Art und Weise zu lesen, sähe in Perl so aus:
use strict;
use warnings;
use bytes;
use 5.010;
my $bin = join '', ( 'A'..'Z' );
printf qq(
%s
%s
), sread(\$bin, 3), sread(\$bin, 444);
# Funktion merkt sich die Position in $p
sub sread{
my $string = shift; # Referenz!!!
my $offset = shift;
state $p;
$p ||= 0;
my $rv = substr($$string, $p, $offset);
$p += $offset;
return $rv;
}
Aber so wies aussieht, wirds in JavaScript vorerst nicht einfacher zu machen sein über ArrayBuffer und Uint8Array, subarry(), DataView usw. pl