perl gunzip zu puffern und gunzip haben unterschiedliche Bytereihenfolgen
Ich benutze Perl v5.22.1, 2,068 Storable
2.53_01 und IO::Uncompress::Gunzip
einzureichen.
Ich möchte Perl verwenden, um eine Storable
Datei in den Speicher zu gunzip, ohne eine Zwischendatei zu verwenden.
Ich habe eine Variable $zip_file = '/some/storable.gz'
, die auf diese gezippte Datei zeigt.
Wenn ich direkt in eine Datei gimpzip, funktioniert das gut, und %root
ist korrekt auf die Storable
Hash festgelegt.
gunzip($zip_file, '/home/myusername/Programming/unzipped');
my %root = %{retrieve('/home/myusername/Programming/unzipped')};
Allerdings, wenn ich gunzip in den Speicher wie folgt aus:
my $file;
gunzip($zip_file, \$file);
my %root = %{thaw($file)};
ich den Fehler
Storable binary image v56.115 more recent than I am (v2.10)`
so die speicherbare die magische Zahl abgeschlachtet wurde erhalten: es sollte nie sei so hoch.
Die Zeichenfolgen in dem entpackten Puffer sind jedoch immer noch korrekt; Der Puffer beginnt mit pst
, das ist der korrekte Storable
Header. Es scheint nur Multi-Byte-Variablen wie ganze Zahlen zu sein, die gebrochen werden.
Hat dies etwas mit der Byte-Reihenfolge zu tun, so dass das Schreiben in eine Datei in einer Weise funktioniert, während das Schreiben in einen Dateipuffer in einer anderen funktioniert? Wie kann ich in einen Puffer packen, ohne dass es meine ganzen Zahlen ruiniert?
Ausgezeichnete Antwort – Borodin
Das war richtig! Leider habe ich die Storable-Dateien nicht erstellt, so dass ich nicht wählen kann, Freeze statt Store zu verwenden. Ich fand jedoch, dass es immer noch möglich ist, einen "Speicher" im Speicher abzurufen, indem $ file in ein Datei-Handle umgewandelt wird: 'öffne meine $ fake_fh, <<,> $ file;' und dann 'fd_retrieve ($ fake_fh);' – Miguel