ChatGPT für die Migration von Perl Code

Vor einem halben Jahr habe ich eine große Migration des Proxer Stream Backends durchgeführt. Da hatte ich den essentiellen Teil des Stream Backends in PHP neu entwickelt. Ich habe große Mühe ins Reverse Engineering gesteckt. Die Migration war erfolgreich und wir haben seit dem ein schlankes und sicheres Backend, was für uns wartbarer ist.

Meine Anfrage an ChatGPT

Ein Aspekt der Streaming-Softwarelandschaft lief aber nach wie vor in altem Coding. Die Streaming-Fileserver wurden noch mit altem Coding betrieben. Die Priorität, diese ebenfalls zu migrieren, war niedrig. Anders als im Backend gibt es hier keine Binärdateien, sondern Perl-Code was überführt werden muss. Im Vergleich zu vor einem halben Jahr gibt es heute außerdem ChatGPT, was mir beim Verstehen und Migrieren des alten Codings helfen kann. Ich will in diesem Blogpost meine Erfahrung an einem Anwendungsfall teilen.

Beispiel Perl-Code

Perl zu verstehen ist meistens gar nicht so kompliziert. Das Problem ist meistens eher das alte Coding, mit dem ich zu kämpfen habe. Teilweise ändert sich auch nach Perl-Version das Verhalten von Funktionen. Im folgenden ist ein Beispielcode.

sub MD5Hash
{
   my ($file) = @_;
   open(FILE,$file)||die"cant open file";
   my $data;
   read(FILE,$data,4096);
   seek(FILE,-4096,2);
   read(FILE,$data,4096,4096);
   return(Digest::MD5::md5_base64 $data);
}

Diese Funktion erstellt basierend auf einer Datei ein Hash. Nun ist die Herausforderung exakt den selben Hash mit PHP zu generieren. Ich weiß basierend auf vorherigen Hashwerten, dass eine bestimmte Datei beispielsweise folgenden Hash generiert.

TfUGR5lATqcGF+blExKABw

Ich möchte also mit PHP Code bei der selben Datei den exakt selben Hash-Wert generieren. Ich bin wie kein Experte in Perl und will mich auch nicht allzu lange an jeder einzelnen Funktion aufhalten. Es ist ChatGPT gefragt!

Anfragen an ChatGPT

Erst einmal habe ich die Antwort direkt ausgetestet mit der selben Datei, bei der ich bereits einen existierenden Hash besitze. Die neue Funktion hat folgendes zurück gegeben.

TfUGR5lATqcGF+blExKABw==

Komisch. Also auf jeden Fall kommt das sehr nah dran an dem Original Hashcode. Es sind hier jedoch zwei Equivalenzzeichen am Ende des Hashes, die im ursprünglichen Hash nicht enthalten sind. Direkt mal nachfragen.

Wow, das ist mal einer Erklärung. Ich bin mir nicht sicher, ob ich irgendwo eine ähnlich präzise Antwort auf diese Frage gefunden hätte. Die letzte Funktion war dann tatsächlich des Rätsels Lösung.

function MD5Hash($file) {
	if (!file_exists($file)) {
	    die("can't open file");
	}
	$data = file_get_contents($file, false, null, 0, 4096);
	$data .= file_get_contents($file, false, null, -4096, 4096);
	return rtrim(base64_encode(md5($data, true)), '=');
}

Der neu generierte Hash entsprach am Ende exakt dem meiner Referenz.

Ergebnis

Für mich ist das eine weitere Erfahrung mit ChatGPT, die mich vom Nutzen von ChatGPT überzeugt. Eine zufällige Herausforderung, bei der ich vermutlich normalerweise ein paar Stunden damit verbringen würde, die Details von der ursprünglichen Implementierung zu verstehen, wurde hier innerhalb von weniger Minuten gelöst und auch noch verständlich erklärt. Dank ChatGPT habe ich nicht nur die Herausforderung lösen können, sondern habe auch was neues gelernt. ChatGPT kann nicht nur unterstützen, neuen Code zu schreiben, sondern auch existierenden alten Code zu verstehen und in neuen Code zu überführen.