2016-12-02 2 views
0

Ich habe eine große .pm Datei, die nur aus einem sehr großen Perl Hash mit vielen Unterstrichen bestehen. Ich muss diesen Hash in ein Java-Programm laden, etwas arbeiten und Änderungen an den Daten vornehmen, die darunter liegen, und es wieder in eine .pm Datei speichern, die ähnlich aussehen sollte wie die, mit der ich angefangen habe.Laden Sie einen Perl Hash in Java

Inzwischen habe ich versucht, es zeilenweise durch Regex und String-Matching zu konvertieren, wandeln es in ein XML-Dokument und später Elementswise Pars es wieder in eine Perl-Hash.

Das funktioniert irgendwie, scheint aber ziemlich zwielichtig. Gibt es eine zuverlässigere Möglichkeit, den Perl-Hash zu parsen, ohne eine Perl-Runtime installiert zu haben?

Antwort

1

Sie haben ganz Recht, es ist völlig dreckig. Regex und String für XML an erster Stelle ist eine schreckliche Idee, und ehrlich gesagt ist XML wahrscheinlich nicht gut dafür geeignet.

Ich würde vorschlagen, dass Sie JSON betrachten. Ich würde betäubt sein zu finden java kann nicht umgehen JSON und es ist inhärent eine Hash-und Array-orientierte Datenstruktur.

So kann man ganz wörtlich:

use JSON; 
print to_json ($data_structure, { pretty => 1 }); 

Hinweis - es wird für Serialisierung Objekte nicht funktionieren, aber für Perl-Hash/array/Scalar-Strukturen wird es gut funktionieren.

Sie können dann importieren sie wieder in Perl mit:

my $new_data = from_json $string; 
print Dumper $new_data; 

Entweder Dumper in einer Datei, aber da Sie Anforderung ist mehrsprachiger geht nach vorn, nur mit nativen JSON als ‚Ruhestellung‘ Daten ist wahrscheinlich eine vernünftige Wahl.

Aber wenn Sie analysieren Perl-Code in Java, ohne Perl-Interpreter? Nein, das ist nur Wahnsinn.

+1

Ich hatte gehofft, vielleicht gibt es eine Perl-Interpreter-Bibliothek für Java, da ich keine gefunden habe. Aber Ihre Antwort macht mich mehr Zweifel, dass es irgendwelche – chenino

+0

Ich denke, es ist unglaublich unwahrscheinlich, weil "Perl" ist der "Perl-Interpreter", den Sie suchen. Ich kann mir nicht vorstellen, dass irgendjemand perl als Java-Bibliothek umschreibt, nur weil sie 'perl' _und_' java' nicht installieren wollen. – Sobrique

+0

Ja, wenn es nicht Platform Independent sein müsste, würde ich einen lokalen Perl Parser einschließen, da das Lesen eines Hashs nicht viele Pakete benötigt. Nun, wenigstens hat der Hash eine konsistente Struktur, also ist es irgendwie möglich, ihn zu analysieren und Schlüssel und Wert davon zu lesen, aber ich habe Angst davor, dass Benutzer schlecht geschriebene Hashes eingeben – chenino