Frage

Es ist schon 22 Jahre zwischen der ursprünglichen Veröffentlichung von Perl 1.0 (18. Dezember 1987) und die aktuelle stabile Version 5.10.1 (2009).

Während dieser 22 Jahre die folgenden bemerkenswerten Veröffentlichungen vorgenommen:

  • Perl 1.0 (1987 - initial release)
  • Perl 2 (1988 - besser regulärer Ausdrücke)
  • Perl 3 (1989 - Unterstützung für binäre Datenströme)
  • Perl 4 (1991 - die Version von Perl Identifizierung im Camel Buch beschrieben)
  • Perl 5 (1994 - wichtige Änderungen eingeführt, in der Nähe komplette Neufassung des Dolmetschers)
  • Perl 5.6 (2000-64 Bit-Unterstützung, Unicode-Strings, Unterstützung für große Dateien)
  • Perl 5.8 (2002 - verbesserte Unicode-Unterstützung, neue IO-Implementierung)
  • Perl 5.10 (2007 - neue Switch-Anweisung, reguläre Ausdrücke Updates, smart Match-Operator)

Ich suche spezielle Beispiele von rückwärts Inkompatibilitäten in der Geschichte von Perl.

Frage:

  • In der 22 Jahre Geschichte von Perl, gibt es Beispiele von Perl rückwärts Inkompatibilität wo Perl Quellcode Perl Version X-Targeting wird nicht unter Version laufen Y (wobei Y> X)?

Bitte geben Sie Referenzen und Code-Beispiele, wenn möglich.

War es hilfreich?

Lösung

Eine der größten absichtlichen Inkompatibilitäten ist Array-Interpolation, die zwischen 5 Perl 4 und Perl verändert.

my @example = qw(1 2 3);
print "foo@example.com";

In Perl 4, das wäre:

foo@example.com

In Perl 5, das wäre:

foo1 2 3.com

Zum Glück, wenn das Array nicht existiert Perl werden Sie über „mögliche unbeabsichtigte Interpolation“ warnen.

Themen unterzog sich eine große Veränderung zwischen 5,005 und 5,6. „5005 Threads“ verwendet, um das traditionelle POSIX Threading-Modell, bei dem alle globalen Daten gemeinsam genutzt wird. Während in der Theorie dieses schneller war, denn dann könnte Perl nur POSIX-Threads verwendet, war es ein Alptraum für Perl-Programmierer. Die meisten Perl-Module waren nicht Thread-sicher. Und es nie wirklich gut funktioniert.

5,6, Activestate und andere gemacht fork () unter Windows. Wenn Sie die Gabel () unter Windows, Perl würde eine Kopie des Interpreters Objekts machen und die OP-Codes beiden Dolmetscher laufen. Dies wurde als „Vielzahl“ bekannt ist.

5,8, lief Arthur Bergman mit, dass und verwendet es ithreads zu erstellen. Da Multiplizität ist ein separater Prozess zu emulieren, werden keine Daten standardmäßig freigegeben. Nur Daten, die Sie geteilt sagen wird, wird geteilt. Das macht sie viel sicherer zu verwenden, obwohl es lange dauerte, bis ithreads stabil waren. Leute wie Elizabeth Mattijsen und Jerry Hedden gemacht, dass passieren.

5005threads wurden schließlich in 5.10.0 ausgemerzt. Eine Kompatibilitätsschicht vorhanden ist, aber ich bezweifle es wirklich in der Produktion Code funktionieren würde.

Eine weitere große Inkompatibilität kam WRT Unicode zwischen 5,6 und 5,8. Unicode in 5,6 blies. Unabhängig davon, ob ein String wurde Unicode wurde von dem umgebenden Rahmen entschieden. Es wurde komplett neu entwickelt in 5.8 so jetzt die Unicodeiness einer Zeichenkette an die Schnur gebunden ist. Code geschrieben in der Regel 5.6 des Unicode verwendet hatte oft in 5.8 neu geschrieben werden, weil 5.6 Unicode zu bekommen Recht auf Arbeit Sie hässliche Hacks zu tun hatte.

Vor kurzem 5.10.1 machten eine Reihe von inkompatiblen Änderungen an Smart-match. Zum Glück wurden sie in 5.10.0 so dass sie nicht eine großen Sache eingeführt. Die Geschichte gibt es Perl 6 eingeführt, um das Smart-match-Konzept, und es wurde zu einer Entwicklungsversion von Perl 5.er Zeit zurückzuportiert vergangen, und Perl 6 Idee des Smart-Matching geändert. Niemand sagte dem Perl 5 Jungs und es ging in 5.10.0 out unverändert. Larry Wall bemerkt und tat das Äquivalent von OMG YER DOIN eS FALSCH !!! Die neue Perl 6-Version als deutlich besser zu sehen war und 5.10.1 es so festgelegt.

Andere Tipps

Pseudo-Hashes ist ein aktuelles Beispiel, dass Frühling auf meinen Kopf. Im Allgemeinen perldelta Dateien einen Überblick über inkompatible Änderungen in einer bestimmten Version. Diese Veränderungen fast immer entweder dunkel (wie pseudo-Hashes) oder klein ist.

Ja. Es gibt viele, obwohl sie in der Regel kleinere sind. Manchmal ist dies aufgrund deprecation Zyklen letztlich bei der Entfernung enden. Manchmal ist es aufgrund der Semantik für neue (und experimentell) Eigenschaften zu verändern. Manchmal ist es Bug-Fixes für Dinge, die nicht richtig funktionieren. Der Perl-Entwickler nimmt sich große Mühe Kompatibilität zwischen den Versionen, wo immer möglich zu erhalten rückwärts. Ich kann mich nicht daran erinnern, jemals einen Skript, die durch ein Upgrade auf eine neue Version von Perl gebrochen war.

Der interne Hash-Auftrag wurde mehrmals geändert. Zwar ist dies nicht etwas ist, sollten Sie sich verlassen, kann es zu Problemen führen, wenn Sie unwissentlich tun.

Binäre Inkompatibilität zwischen dem großen (5.x) Freisetzungen ist üblich, aber das bedeutet in der Regel nur, dass alle XS-Erweiterungen neu kompiliert werden müssen.

Die komplette Liste ist viel zu lange hier aufzulisten. Sie können es durch die „Inkompatible Änderungen“ in jeder Geschichte Version zu überprüfen.

OTOH gibt es einige wilden Funktionen zurück zu Perl Datierung 1, die noch arbeiten. Zum Beispiel, was macht diesen Druck?

%foo = (foo => 23);
print values foo

Das ist richtig, 23. Warum? Denn „assoziative Arrays“ waren nicht erstklassige Objekte in Perl 1. $foo{bar} gearbeitet, aber es gab keinen %foo. Ich weiß wirklich nicht, warum, auch die Perl 1-man-Seite bestätigt dies warzige ist. Also für die Kompatibilität mit Perl 1 können Sie eine globale Hash zugreifen, ohne einen % zu verwenden, vielleicht, wenn Ihre Tastatur defekt ist oder Apple entscheidet niemand das % Symbol verwendet.

chdir hat einige Merkwürdigkeiten. chdir() ohne Argument werden Sie zu Ihrem Home-Verzeichnis nehmen, die Shell cd Verhalten zu replizieren. Leider wird so chdir undef und chdir "" was es schwierig macht Fehler um chdir zu fangen. Zum Glück ist dieses Verhalten als veraltet. Ich muss sicherstellen, dass es stirbt in 5.14.

$[ ist immer noch herum und bleibt undeprecated, aber „dringend abgeraten“. Es ändert sich, was der erste Index eines Arrays ist, wenn Sie also einen Menschen wie ich und zählen von 1 könnten Sie tun:

$[ = 1;
@foo = qw(foo bar baz);
print $foo[2];   # prints bar

Perl 5 geändert es Datei-scoped zu sein, da es sonst eine Leistung ziehen und eine große Quelle von CrAzY war.

Ich habe einige flippigen Fehler habe mit Perl4 und Perl5 in einer anderen Reihenfolge linke und rechte Seite einer Zuweisung Auswertung, unter Angabe den Perl Fallen für den unvorsichtigen :

  

LHS vs. RHS jeder Zuweisungsoperator. LHS wird zunächst in Perl4, an zweiter Stelle in perl5 ausgewertet; dies kann die Beziehung zwischen Nebenwirkungen in Unterausdrücke beeinflussen.

@arr = ( 'left', 'right' );
$a{shift @arr} = shift @arr;
print join( ' ', keys %a );
# perl4 prints: left
# perl5 prints: right

Für einige neue und möglicherweise inkompatible Material finden Sie unter die FAQ zwischen Perl4 und Perl5.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top