Der Vorstand des Perl-Projekts hat die Pläne für die weitere Entwicklung der Perl 5-Serie und die Einrichtung von Perl 7 zusammengefasst. Während der Diskussionen stimmte der Vorstand zu, dass es unzulässig wäre, die Kompatibilität mit bereits für Perl 5 geschriebenem Code zu brechen, es sei denn, solche Brüche sind notwendig, um Sicherheitsanfälligkeiten zu beheben. Der Vorstand kam auch zu dem Schluss, dass die Sprache weiterentwickelt werden muss und neue Möglichkeiten intensiver gefördert werden sollten, während gleichzeitig der Zugang zu neuen Funktionen vereinfacht und deren Einführung gefördert wird.
Im Gegensatz zu den ursprünglichen Absichten, die Änderungen in der Perl 7-Serie standardmäßig als inkompatibel zu erlauben, bedeutet der neue Plan eine schrittweise Umwandlung der Perl 5-Serie in Perl 7, ohne die Rückwärtskompatibilität zu bestehendem Code zu verletzen. Die Veröffentlichung von Perl 7.0 wird konzeptionell nicht von einer neuen Serie von Perl 5.xx abweichen.
Die Entwicklung neuer Versionen von Perl 5 wird weiterhin wie gewohnt fortgesetzt — neue Funktionen, die in den Branch eingefügt werden und nicht mit altem Code kompatibel sind, werden wie bisher nur aktiviert, wenn sie ausdrücklich durch die Pragmas „use version“ oder „use feature“ im Code angegeben werden. So wurde beispielsweise in der Version Perl 5.010 das neue Schlüsselwort „say“ eingeführt, aber da im bestehenden Code Funktionen mit dem Namen „say“ verwendet werden konnten, wurde die Unterstützung des neuen Schlüsselworts nur durch die ausdrückliche Angabe des Pragmas „use feature 'say'“ aktiviert.
Die neue Syntax, die bei der Verarbeitung in früheren Versionen zu einem Fehler führte, wird sofort verfügbar sein, ohne dass spezielle Pragmas angegeben werden müssen. Zum Beispiel wird in Perl 5.36 eine vereinfachte Syntax zur gleichzeitigen Verarbeitung mehrerer Werte aus einer Liste („foreach my ($key, $value) (%hash) {“) eingeführt, die sofort verfügbar sein wird, auch in Code ohne das Pragma „use v5.36“.
In der aktuellen Version von Perl 5.36 wird mit der Verwendung der Pragmas „use v5.36“ 13 inkompatible Funktionen aktiviert („say“, „state“, „current_sub“, „fc“, „lexical_subs“, „signatures“, „isa“, „bareword_filehandles“, „bitwise“, „evalbytes“, „postderef_qq“, „unicode_eval“ und „unicode_strings“), die Modi „use strict“ und „use warnings“ werden standardmäßig aktiviert, und die Unterstützung für die veraltete indirekte Notation von Objektaufrufen (wo anstelle von „->“ ein Leerzeichen verwendet wird) sowie mehrdimensionale Arrays und Hashes im Stil von Perl 4 („$hash{1, 2}“) wird deaktiviert.
Wenn genügend Änderungen zusammengekommen sind, wird anstelle eines weiteren Releases von Perl 5.x eine Version Perl 7.0 erstellt, die einen Querschnitt des Zustands darstellt, jedoch vollständig abwärtskompatibel mit Perl 5 bleibt. Für die Aktivierung inkompatibler Änderungen und Einstellungen ist eine ausdrückliche Hinzufügung im Code mit dem pragma „use v7“ erforderlich. Das heißt, Code mit dem pragma „use v7“ kann als „modernes Perl“ interpretiert werden, das die inkompatiblen Änderungen der Sprache verfügbar macht, während ohne dieses pragma „konservatives Perl“ bleibt, das vollständig abwärtskompatibel zu früheren Versionen ist.
Quelle: opennet.ru
