GoGPT Best VPN GoSearch

OnWorks-Favicon

perl5180delta - Online in der Cloud

Führen Sie perl5180delta im kostenlosen OnWorks-Hosting-Anbieter über Ubuntu Online, Fedora Online, Windows-Online-Emulator oder MAC OS-Online-Emulator aus

Dies ist der Befehl perl5180delta, der im kostenlosen OnWorks-Hosting-Provider über eine unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, Windows-Online-Emulator oder MAC OS-Online-Emulator ausgeführt werden kann

PROGRAMM:

NAME/FUNKTION


perl5180delta - was ist neu für perl v5.18.0

BESCHREIBUNG


In diesem Dokument werden die Unterschiede zwischen der Version v5.16.0 und der Version v5.18.0 beschrieben.

Wenn Sie ein Upgrade von einer früheren Version wie v5.14.0 durchführen, lesen Sie zuerst perl5160delta,
Hier werden die Unterschiede zwischen Version 5.14.0 und Version 5.16.0 beschrieben.

Core Erweiterung


New Mechanismus für experimentell Funktionen
Neu hinzugefügte experimentelle Funktionen erfordern nun diesen Zauberspruch:

keine Warnungen „experimental::feature_name“;
Verwenden Sie die Funktion „feature_name“; # würde ohne die vorherige Zeile warnen

Es gibt eine neue Warnungskategorie mit der Bezeichnung „experimentell“, die Warnungen enthält
Feature-Pragma wird ausgegeben, wenn experimentelle Funktionen aktiviert werden.

Neu hinzugefügte experimentelle Funktionen erhalten außerdem spezielle Warn-IDs, die bestehen aus
„experimental::“, gefolgt vom Namen der Funktion. (Es ist geplant, dies zu verlängern
Mechanismus schließlich auf alle Warnungen anwenden, damit diese aktiviert oder deaktiviert werden können
einzeln und nicht nur nach Kategorie.)

Indem ich sage

keine Warnungen „experimental::feature_name“;

Sie übernehmen die Verantwortung für etwaige Schäden, die durch zukünftige Änderungen oder Entfernungen entstehen
Funktion kann dazu führen.

Da einige Funktionen (wie „~~“ oder „mein $_“) jetzt experimentelle Warnungen ausgeben, können Sie dies tun
Ich möchte sie in Code deaktivieren, der auch auf Perls ausgeführt wird, die diese Warnung nicht erkennen
Wenn Sie Kategorien verwenden möchten, sollten Sie das „if“-Pragma wie folgt verwenden:

no if $] >= 5.018, warnings => "experimental::feature_name";

Bestehende experimentelle Funktionen geben diese Warnungen möglicherweise ebenfalls aus. Bitte konsultiere
perxexperiment für Informationen darüber, welche Funktionen als experimentell gelten.

Hasch überwachen
Änderungen an der Implementierung von Hashes in Perl v5.18.0 werden eine der sichtbarsten sein
Änderungen am Verhalten des vorhandenen Codes.

Standardmäßig können jetzt zwei unterschiedliche Hash-Variablen mit identischen Schlüsseln und Werten bereitgestellt werden
deren Inhalt in einer anderen Reihenfolge, in der er zuvor identisch war.

Wenn Sie auf diese Veränderungen stoßen, liegt der Schlüssel zum Aufräumen darin, sie zu akzeptieren Hashes
sind ungeordnet Produktauswahl und entsprechend zu handeln.

Hasch Randomisierung

Der von Perls Hash-Funktion verwendete Startwert ist jetzt zufällig. Dies bedeutet, dass die Reihenfolge welche
Schlüssel/Werte werden von Funktionen wie „keys()“, „values()“ und „each()“ zurückgegeben
unterscheiden sich von Lauf zu Lauf.

Diese Änderung wurde eingeführt, um Perls Hashes robuster gegenüber der algorithmischen Komplexität zu machen
Angriffe, und auch weil wir entdeckt haben, dass es Fehler bei der Hash-Reihenfolge von Abhängigkeiten aufdeckt und
erleichtert das Aufspüren.

Toolchain-Betreuer möchten möglicherweise in zusätzliche Infrastruktur investieren, um Dinge zu testen
so was. Das mehrmalige Durchführen von Tests und das anschließende Vergleichen der Ergebnisse reicht aus
Hash-Reihenfolge-Abhängigkeiten im Code leichter zu erkennen. Den Autoren wird dringend empfohlen, dies nicht zu tun
Offenlegen Sie die Schlüsselreihenfolge von Perls Hashes einem unsicheren Publikum.

Darüber hinaus hat jeder Hash seine eigene Iterationsreihenfolge, was es deutlich schwieriger machen dürfte
um zu bestimmen, was der aktuelle Hash-Seed ist.

New Hash- Funktionen

Perl v5.18 bietet Unterstützung für mehrere Hash-Funktionen und hat die Standardeinstellung geändert (in
ONE_AT_A_TIME_HARD) können Sie einen anderen Algorithmus auswählen, indem Sie beim Kompilieren ein Symbol definieren
Zeit. Eine aktuelle Liste finden Sie im INSTALLIEREN dokumentieren. Beachten Sie, dass wir ab Perl v5.18
Ich kann die Verwendung von Default oder SIPHASH nur empfehlen. Von allen anderen ist bekannt, dass sie das getan haben
Sicherheitsfragen und dienen ausschließlich Forschungszwecken.

PERL_HASH_SEED -Umgebung Variable jetzt an nimmt a hex Wert

„PERL_HASH_SEED“ akzeptiert keine Ganzzahl mehr als Parameter; stattdessen ist der Wert
Es wird erwartet, dass es sich um einen Binärwert handelt, der in einer Hex-Zeichenfolge codiert ist, z. B. „0xf5867c55039dc724“. Das
besteht darin, dafür zu sorgen, dass die Infrastruktur Hash-Seeds beliebiger Länge unterstützt, die möglicherweise länger sind
das einer ganzen Zahl. (SipHash verwendet einen 16-Byte-Seed.)

PERL_PERTURB_KEYS -Umgebung Variable hinzugefügt

Die Umgebungsvariable „PERL_PERTURB_KEYS“ ermöglicht die Steuerung der Ebene von
Randomisierung auf „Schlüssel“ und Freunde angewendet.

Wenn „PERL_PERTURB_KEYS“ 0 ist, wird Perl die Tastenreihenfolge überhaupt nicht zufällig anordnen. Die Chance
dass die „Schlüssel“-Änderungen aufgrund einer Einfügung grundsätzlich dieselben sind wie in früheren Perls
wenn die Bucket-Größe geändert wird.

Wenn „PERL_PERTURB_KEYS“ 1 ist, wird Perl die Schlüssel auf nicht wiederholbare Weise zufällig anordnen. Der
Die Wahrscheinlichkeit, dass sich „Schlüssel“ aufgrund einer Einfügung ändern, ist sehr hoch. Dies ist am sichersten
und Standardmodus.

Wenn „PERL_PERTURB_KEYS“ 2 ist, wird Perl die Schlüssel auf wiederholbare Weise zufällig anordnen. Wiederholt
Läufe desselben Programms sollten jedes Mal die gleiche Ausgabe erzeugen.

„PERL_HASH_SEED“ impliziert eine nicht standardmäßige „PERL_PERTURB_KEYS“-Einstellung. Einstellung
„PERL_HASH_SEED=0“ (genau eine 0) impliziert „PERL_PERTURB_KEYS=0“ (Randomisierung des Hash-Schlüssels).
deaktiviert); Das Setzen von „PERL_HASH_SEED“ auf einen anderen Wert impliziert „PERL_PERTURB_KEYS=2“.
(deterministische und wiederholbare Hash-Schlüssel-Randomisierung). Angabe von „PERL_PERTURB_KEYS“
explizit auf eine andere Ebene überschreibt dieses Verhalten.

Hash::Util::hash_seed() jetzt an Rückgabe a Schnur

Hash::Util::hash_seed() Gibt jetzt einen String anstelle einer Ganzzahl zurück. Dies dient dazu, das zu machen
Die Infrastruktur unterstützt Hash-Seeds beliebiger Länge, die die von a überschreiten können
ganze Zahl. (SipHash verwendet einen 16-Byte-Seed.)

Ausgang of PERL_HASH_SEED_DEBUG hat war geändert

Die Umgebungsvariable PERL_HASH_SEED_DEBUG sorgt nun dafür, dass Perl sowohl die Hash-Funktion anzeigt
Perl wurde erstellt mit, und der für diesen Prozess verwendete Startwert im Hexadezimalformat. Code, der dies analysiert
Die Ausgabe muss, sofern vorhanden, geändert werden, um das neue Format zu berücksichtigen. Beispiel für das Neue
Format:

$ PERL_HASH_SEED_DEBUG=1 ./perl -e1
HASH_FUNCTION = MURMUR3 HASH_SEED = 0x1476bb9f

Upgrade zu Unicode 6.2
Perl unterstützt jetzt Unicode 6.2. Eine Liste der Änderungen gegenüber Unicode 6.1 finden Sie unter
<http://www.unicode.org/versions/Unicode6.2.0>.

Charakter Name Aliase Mai jetzt an das nicht-lateinischer1-Bereich Zeichen
Es ist möglich, eigene Namen für Zeichen zur Verwendung in „\N{...}“ zu definieren.
„charnames::vianame()“ usw. Diese Namen können nun aus Zeichen aus dem bestehen
gesamten Unicode-Bereich. Dadurch können Namen nicht nur in Ihrer Muttersprache, sondern auch in Ihrer Muttersprache verwendet werden
Englisch. Für die Zeichen, die verwendet werden dürfen, gelten bestimmte Einschränkungen (Sie können diese nicht definieren).
ein Name, der zum Beispiel Satzzeichen enthält). Siehe „BENUTZERDEFINIERTE ALIASE“ in Charnamen.

New DTrace Sonden
Die folgenden neuen DTrace-Probes wurden hinzugefügt:

· „offener Eintritt“

· „Ladedatei“

· „geladene Datei“

"${^LAST_FH}"
Diese neue Variable bietet Zugriff auf das zuletzt gelesene Dateihandle. Dies ist das
Handle, das von $ verwendet wird. und durch „tell“ und „eof“ ohne Argumente.

Normale Ausdruck Stelle den Einkauf & Prozesse
Hier ist eine experimentell Funktion, um den Abgleich mit der Vereinigung, dem Schnittpunkt usw. zu ermöglichen,
von Sätzen von Codepunkten, ähnlich wie Unicode::Regex::Set. Es kann auch zur Verlängerung verwendet werden
„/x“-Verarbeitung in [in Klammern gesetzte] Zeichenklassen und als Ersatz für benutzerdefinierte Zeichenklassen
Eigenschaften, die komplexere Ausdrücke ermöglichen als sie. Siehe „Erweiterte Klammerung“.
Zeichenklassen“ in perlrecharclass.

Lexikalisch Unterprogramme
Diese neue Funktion wird weiterhin berücksichtigt experimentell. Um es zu aktivieren:

5.018 verwenden;
keine Warnungen „experimental::lexical_subs“;
Verwenden Sie die Funktion „lexical_subs“;

Sie können jetzt Unterprogramme mit „state sub foo“, „my sub foo“ und „our sub foo“ deklarieren.
(„state sub“ erfordert, dass die „state“-Funktion aktiviert ist, es sei denn, Sie schreiben es als
„CORE::state sub foo“.)

„state sub“ erstellt eine Unterroutine, die innerhalb des lexikalischen Bereichs sichtbar ist, in dem sie deklariert ist.
Die Unterroutine wird von Aufrufen der äußeren Unterroutine gemeinsam genutzt.

„my sub“ deklariert eine lexikalische Unterroutine, die jedes Mal erstellt wird, wenn der umschließende Block vorhanden ist
trat ein. „state sub“ ist im Allgemeinen etwas schneller als „my sub“.

„our sub“ deklariert einen lexikalischen Alias ​​für die gleichnamige Paket-Subroutine.

Weitere Informationen finden Sie unter „Lexikalische Unterroutinen“ in perlsub.

Berechnet Labels
Die Schleifensteuerungen „next“, „last“ und „redo“ sowie der spezielle „dump“-Operator ermöglichen nun
Beliebige Ausdrücke, die zur Berechnung von Beschriftungen zur Laufzeit verwendet werden. Zuvor kein Argument
Das war keine Konstante und wurde als leere Zeichenfolge behandelt.

Mehr KERN:: U-Boote
Mehrere weitere integrierte Funktionen wurden als Unterroutinen zum CORE::-Namespace hinzugefügt -
nämlich jene nicht überschreibbaren Schlüsselwörter, die ohne benutzerdefinierte Parser implementiert werden können:
„definiert“, „löschen“, „existiert“, „glob“, „pos“, „prototyp“, „skalar“, „split“, „studieren“ und
„undef“.

Da einige davon Prototypen haben, wurde „prototype('CORE::...')“ geändert, um keinen zu erstellen
Unterscheidung zwischen überschreibbaren und nicht überschreibbaren Schlüsselwörtern. Das ist zu machen
„prototype('CORE::pos')“ konsistent mit „prototype(&CORE::pos)“.

"töten" mit Negativ Signal Namen
„kill“ hat immer eine negative Signalzahl zugelassen, die stattdessen die Prozessgruppe tötet
eines einzelnen Prozesses. Es sind auch Signalnamen zulässig. Aber es hat sich nicht benommen
konsequent, da negative Signalnamen als 0 behandelt wurden. Jetzt negative Signalnamen
wie „-INT“ werden genauso unterstützt und behandelt wie -2 [perl #112990].

Sicherheit


Weitere Informationen finden Sie auch in den unterschreiben. Hash- überwachen
Einige der Änderungen bei der Hash-Überarbeitung wurden vorgenommen, um die Sicherheit zu erhöhen. Bitte lesen Sie das
.

„Lagerbar“ Sicherheitdienst Warnung in Dokumentation
Die Dokumentation zu „Storable“ enthält jetzt einen Abschnitt, der die Leser vor der Gefahr warnt
speicherbare Dokumente aus nicht vertrauenswürdigen Quellen zu akzeptieren. Die Kurzfassung ist das
Die Deserialisierung bestimmter Datentypen kann zum Laden von Modulen und zur Ausführung anderer Codes führen.
Hierbei handelt es sich um dokumentiertes und gewolltes Verhalten, das jedoch einen Angriffsvektor für die Angreifer eröffnet
bösartige Entitäten.

„Gebietsschema::Maketext“ erlaubt Code Injektion a böswilligen Vorlage
Wenn Benutzer eine Übersetzungszeichenfolge für Locale::Maketext bereitstellen könnten, könnte dies dazu verwendet werden
Ruft beliebige Perl-Subroutinen auf, die im aktuellen Prozess verfügbar sind.

Dies wurde behoben, es ist jedoch weiterhin möglich, jede von bereitgestellte Methode aufzurufen
„Locale::Maketext“ selbst oder eine Unterklasse, die Sie verwenden. Eine dieser Methoden wiederum
ruft die Unterroutine „sprintf“ des Perl-Kerns auf.

Zusammenfassend lässt sich sagen, dass es schlecht ist, Benutzern zu erlauben, Übersetzungszeichenfolgen bereitzustellen, ohne sie zu prüfen
Idee.

Diese Sicherheitslücke ist in CVE-2012-6329 dokumentiert.

Vermeiden Aufruf Memset mit a Negativ zählen
Schlecht geschriebener Perl-Code, der es einem Angreifer ermöglicht, die Anzahl der Perl-Zeichenfolge „x“ anzugeben
Repeat-Operator kann bereits einen Denial-of-Service-Angriff auf Speichererschöpfung verursachen. Ein Fehler in
Perl-Versionen vor Version 5.15.5 können dazu führen, dass es zu einem Heap-Pufferüberlauf kommt. zusammen mit
Versionen von glibc vor 2.16 erlaubt es möglicherweise die Ausführung von beliebigem Code.

Dem in diesem Commit angesprochenen Fehler wurde die Kennung CVE-2012-5195 zugewiesen und war
recherchiert von Tim Brown.

Unvereinbar Änderungen


Weitere Informationen finden Sie auch in den unterschreiben. Hash- überwachen
Einige der Änderungen bei der Hash-Überarbeitung sind nicht vollständig mit früheren Versionen kompatibel
von Perl. Bitte lesen Sie diesen Abschnitt.

An unbekannt Charakter Name in "\N{...}" is jetzt an a Syntax Fehler
Zuvor wurde eine Warnung ausgegeben und das Unicode-ERSATZZEICHEN wurde ersetzt. Jetzt Unicode
empfiehlt, dass es sich bei dieser Situation um einen Syntaxfehler handelt. Auch das bisherige Verhalten führte zu einigen
verwirrende Warnungen und Verhaltensweisen, und da das ERSATZZEICHEN keine andere Verwendung hat
als als Ersatz für ein unbekanntes Zeichen ist jeder Code, bei dem dieses Problem auftritt, fehlerhaft.

Früher veraltet Zeichen in "\N{}" Charakter Name Aliase sind jetzt an Fehler.
Seit v5.12.0 ist es veraltet, bestimmte Zeichen in benutzerdefinierten „\N{...}“ zu verwenden.
Charakternamen. Diese verursachen nun einen Syntaxfehler. Beispielsweise handelt es sich jetzt um einen Fehler
Beginnen Sie einen Namen mit einer Ziffer, z. B. in

my $undraftable = "\N{4F}"; # Syntax-Fehler!

oder Kommas irgendwo im Namen zu haben. Siehe „BENUTZERDEFINIERTE ALIASE“ in Charnamen.

"\N{GLOCKE}" jetzt an bezieht sich zu U + 1F514 beantragen müssen of U + 0007
Unicode 6.0 verwendete den Namen „BELL“ für einen anderen Codepunkt als traditionell
gemeint. Seit Perl v5.14 bezog sich die Verwendung dieses Namens immer noch auf U+0007, würde jedoch a auslösen
Verfallswarnung. Nun bezieht sich „BELL“ auf U+1F514 und der Name für U+0007 ist „ALERT“.
Alle Funktionen in charnames wurden entsprechend aktualisiert.

New Beschränkungen in Mehrcharakter Groß- und Kleinschreibung wird nicht beachtet Abgleichen in Normale Ausdruck Eingeklammert
Charakter Klassen
Unicode hat nun seine bisherige Empfehlung für reguläre Ausdrücke zurückgezogen
Behandeln Sie automatisch Fälle, in denen ein einzelnes Zeichen mit mehreren Zeichen übereinstimmen kann.
unempfindlich, zum Beispiel der Buchstabe LATEINISCHER KLEINBUCHSTABE SCHARF S und die Folge „ss“.
Dies liegt daran, dass es sich als undurchführbar erweist, dies insgesamt korrekt durchzuführen
Umstände. Da Perl versucht hat, dies so gut wie möglich zu erreichen, wird es dies auch weiterhin tun
Also. (Wir erwägen eine Option zum Deaktivieren.) Es gibt jedoch eine neue Einschränkung
zu solchen Übereinstimmungen hinzugefügt, wenn sie in [in Klammern stehenden] Zeichenklassen auftreten. Menschen waren
Dinge wie „/[\0-\xff]/i“ angeben und überrascht sein, dass es mit den beiden übereinstimmt
Zeichenfolge „ss“ (da in diesem Bereich der lateinische Kleinbuchstabe „S“ vorkommt). Das
Das Verhalten stimmt auch nicht mit der Verwendung einer Eigenschaft anstelle eines Bereichs überein:
„\p{Block=Latin1}“ enthält auch den LATEINISCHEN KLEINBUCHSTABEN SCHARF S, aber „/[\p{Block=Latin1}]/i“
stimmt nicht mit „ss“ überein. Die neue Regel besagt, dass bei Groß-/Kleinschreibung mit mehreren Zeichen Folgendes gilt:
Bei einer unempfindlichen Übereinstimmung innerhalb einer in Klammern gesetzten Zeichenklasse muss das Zeichen explizit angegeben werden
aufgeführt und nicht als Endpunkt eines Bereichs. Dies entspricht eher dem Prinzip von
Geringstes Erstaunen. Siehe „Zeichenklassen in Klammern“ in perlrecharclass. Beachten Sie, dass a
Der Fehler [perl #89774], der jetzt im Rahmen dieser Änderung behoben wurde, verhinderte das vorherige Verhalten
voll funktionsfähig.

Explicit Regeln für Variable Namen und Identifikatoren
Aufgrund eines Versehens wurden in Version 5.16 Variablennamen mit nur einem Zeichen vollständig entfernt
uneingeschränkt. Dies öffnete die Tür zu mehreren Arten von Wahnsinn. Ab v5.18 sind diese jetzt
Befolgen Sie die Regeln anderer Bezeichner und akzeptieren Sie zusätzlich Zeichen, die mit dem übereinstimmen
Eigenschaft „\p{POSIX_Punct}“.

Es gibt keinen Unterschied mehr beim Parsen von Bezeichnern, die durch die Verwendung von geschweiften Klammern angegeben werden
im Vergleich zu ohne Zahnspange. Zum Beispiel erlaubte Perl früher „${foo:bar}“ (mit einer einzigen
Doppelpunkt), aber nicht $foo:bar. Da nun beide über einen einzigen Codepfad verwaltet werden, sind sie beides
gleich behandelt: beides ist verboten. Beachten Sie, dass es sich bei dieser Änderung um den Bereich von handelt
zulässige Literalbezeichner, keine anderen Ausdrücke.

Vertikale Registerkarten sind jetzt an Leerzeichen
Niemand konnte sich erinnern, warum „\s“ nicht mit „\cK“, dem vertikalen Tab, übereinstimmte. Jetzt ist es so. Gegeben
Aufgrund der extremen Seltenheit dieses Charakters ist kaum mit Brüchen zu rechnen. Das heißt, hier ist
was es bedeutet:

„\s“ in einem regulären Ausdruck entspricht jetzt unter allen Umständen einem vertikalen Tabulator.

Literale vertikale Tabulatoren in einem Regex-Literal werden ignoriert, wenn der Modifikator „/x“ verwendet wird.

Führende vertikale Tabulatoren, allein oder gemischt mit anderen Leerzeichen, werden jetzt ignoriert, wenn
Interpretieren einer Zeichenfolge als Zahl. Zum Beispiel:

$dec = " \cK \t 123";
$hex = " \cK \t 0xF";

sagen wir 0 + $dec; # war 0 mit Warnung, jetzt 123
sag int $dec; # war 0, jetzt 123
sag oct $hex; # war 0, jetzt 15

"/(?{})/" und "/(??{})/" haben war schwer überarbeitet
Die Implementierung dieser Funktion wurde fast vollständig neu geschrieben. Obwohl es
Die Hauptabsicht besteht darin, Fehler und einige Verhaltensweisen zu beheben, insbesondere im Zusammenhang mit dem lexikalischen Umfang
Variablen, werden sich geändert haben. Dies wird im Abschnitt „Ausgewählte Fehlerbehebungen“ ausführlicher beschrieben.
.

Strengere Parsing of Substitution Ersatz
Es ist nicht länger möglich, die Art und Weise, wie der Parser „s///e“ analysiert, wie folgt zu missbrauchen:

%_=(_,"Nur noch eins");
$_="Perl-Hacker,\n";
s//_}->{_/e;print

"gegeben" jetzt an Aliase die globale $_
Anstatt einem impliziten lexikalischen $_ zuzuweisen, macht „given“ nun das globale $_ zu einem Alias
für sein Argument, genau wie „foreach“. Es wird jedoch immer noch das lexikalische $_ verwendet, falls vorhanden
lexikalisches $_ im Geltungsbereich (wieder genau wie „foreach“) [perl #114020].

Die smartmatch Familie of Funktionen sind jetzt an experimentell
Smart Match, das in Version 5.10.0 hinzugefügt und in Version 5.10.1 erheblich überarbeitet wurde, ist ein fester Bestandteil
Beschwerdepunkt. Obwohl es eine Reihe von Möglichkeiten gibt, in denen es nützlich ist, ist es so
Außerdem erwies es sich sowohl für Benutzer als auch für Implementierer von Perl als problematisch und verwirrend. Es gibt
Es gab eine Reihe von Vorschlägen, wie das Problem am besten angegangen werden kann. Es ist klar, dass
Smartmatch wird sich in Zukunft mit ziemlicher Sicherheit entweder ändern oder ganz verschwinden. Sich verlassen
auf sein aktuelles Verhalten wird nicht empfohlen.

Warnungen werden jetzt ausgegeben, wenn der Parser „~~“, „given“ oder „when“ sieht. Etwas deaktivieren
Um diese Warnungen zu vermeiden, können Sie diese Zeile dem entsprechenden Bereich hinzufügen:

no if $] >= 5.018, warnings => "experimental::smartmatch";

Erwägen Sie jedoch, die Verwendung dieser Funktionen zu ersetzen, da sich dadurch möglicherweise erneut das Verhalten ändert
bevor es stabil wird.

Lexikalisch $_ is jetzt an experimentell
Seit seiner Einführung in Perl v5.10 hat es viel Verwirrung gestiftet, ohne dass es offensichtlich war
Lösung:

· Verschiedene Module (z. B. List::Util) erwarten, dass Callback-Routinen das globale $_ verwenden.
„use List::Util 'first'; my $_; first { $_ == 1 } @list“ funktioniert nicht wie üblich
erwarten von.

· Eine „my $_“-Deklaration früher in derselben Datei kann zu verwirrenden Schließungswarnungen führen.

· Das Unterprogramm-Prototypzeichen „_“ ermöglicht aufgerufenen Unterprogrammen den Zugriff auf Ihr Unterprogramm
lexikalisches $_, also ist es doch nicht wirklich privat.

· Dennoch können Unterprogramme mit einem „(@)“-Prototyp und -Methoden nicht auf die zugreifen
lexikalisches $_ des Aufrufers, es sei denn, sie sind in XS geschrieben.

· Aber selbst XS-Routinen können nicht auf ein deklariertes lexikalisches $_ zugreifen, nicht im Aufruf
Subroutine, aber in einem äußeren Bereich, wenn diese Subroutine zufällig $_ oder nicht erwähnt
Verwenden Sie alle Operatoren, deren Standardwert $_ ist.

Wir hoffen, dass das lexikalische $_ rehabilitiert werden kann, aber dies kann zu Änderungen führen
Verhalten. Bitte verwenden Sie es mit Vorsicht, bis es stabil wird.

Zeile lesen() mit „$/ = \N" jetzt an liest N Figuren, nicht N Bytes
Bisher wurde beim Lesen aus einem Stream mit E/A-Ebenen wie „Kodierung“ die Zeile lesen()
Funktion, auch bekannt als „<>“-Operator, würde lesen N Bytes von oben
Schicht. [perl #79960]

Jetzt, N Stattdessen werden Zeichen gelesen.

Beim Lesen aus Streams ohne zusätzliche Ebenen gibt es seitdem keine Verhaltensänderung
Bytes werden exakt den Zeichen zugeordnet.

Überschrieben „Kugel“ is jetzt an Bestanden dank One Argument
„glob“-Überschreibungen wurde früher ein magisches, undokumentiertes zweites Argument übergeben, das identifizierte
der Anrufer. Nichts auf CPAN nutzte dies und es stand einer Fehlerbehebung im Weg, also war es so
ENTFERNT. Wenn Sie den Anrufer wirklich identifizieren müssen, lesen Sie Devel::Callsite auf CPAN.

Hier Dock Parsing
Der Text eines Here-Dokuments innerhalb eines anführungszeichenähnlichen Operators beginnt jetzt immer in der Zeile
nach dem „<
der enthaltende Anführungszeichen-ähnliche Operator, aber das war nur manchmal der Fall [perl #114040].

Alphanumerisch durch sollen jetzt an be getrennt von die Schließen Trennzeichen of regulär Ausdrücke
Sie dürfen nicht mehr so ​​etwas schreiben wie:

m/a/und 1

Stattdessen müssen Sie schreiben

m/a/ und 1

mit Leerzeichen, das den Operator vom schließenden Trennzeichen des regulären Zeichens trennt
Ausdruck. Das Fehlen von Leerzeichen hat seit Perl zu einer veralteten Warnung geführt
v5.14.0.

qw(...) können. nicht länger be benutzt as Klammern
„qw“-Listen gaukelten dem Parser vor, sie seien immer von ihnen umgeben
Klammern. Dies ermöglichte einige überraschende Konstruktionen wie „foreach $x qw(abc)“
{...}“, was eigentlich „foreach $x (qw(abc)) {...}“ geschrieben werden sollte
Manchmal wird der Lexer in den falschen Zustand versetzt, sodass er nicht vollständig funktioniert, und ähnliches
„foreach qw(abc) {...}“, von dem man erwarten könnte, dass es erlaubt ist, hat überhaupt nicht funktioniert.

Dieser Nebeneffekt von „qw“ wurde nun abgeschafft. Es ist seit Perl veraltet
v5.13.11. Es ist nun notwendig, überall dort, wo die Grammatik aufruft, echte Klammern zu verwenden
für sie.

Interaktion of lexikalisch und Standard Warnungen
Aktivieren Sie alle zuerst verwendeten lexikalischen Warnungen, um alle standardmäßigen lexikalischen Warnungen zu deaktivieren
Warnungen waren noch nicht aktiviert:

$*; # Veraltungswarnung
Warnungen „ungültig“ verwenden;
$#; # Warnung ungültig; Keine Verfallswarnung

Jetzt gibt es die Warnungskategorien „Debugging“, „Veraltet“, „Glob“, „Inplace“ und „Malloc“.
bleibt aktiviert, wenn lexikalische Warnungen aktiviert werden (es sei denn, sie werden durch „Keine Warnungen“ deaktiviert).
Kurs).

Dies kann dazu führen, dass in Code, der zuvor keine Warnungen enthielt, veraltete Warnungen angezeigt werden.

Dies sind die einzigen Kategorien, die nur aus Standardwarnungen bestehen. Standardwarnungen in
Andere Kategorien sind weiterhin durch „Warnungen „Kategorie“ verwenden“ deaktiviert, was bei uns noch nicht der Fall ist
die Infrastruktur zur Steuerung einzelner Warnungen.

"Zustand Unter“ und "unsere Unter“
Aufgrund eines historischen Zufalls waren „State Sub“ und „Our Sub“ gleichbedeutend mit einem einfachen „Sub“,
man könnte also sogar ein anonymes Sub mit „our sub { ... }“ erstellen. Das sind jetzt
Außerhalb der Funktion „lexical_subs“ nicht zulässig. Unter der Funktion „lexical_subs“ finden sie
haben neue Bedeutungen, die in „Lexical Subroutines“ in perlsub beschrieben werden.

definiert Werte gelagert in -Umgebung sind gezwungen zu Byte Streicher
Ein in einer Umgebungsvariablen gespeicherter Wert wurde bei der Vererbung durch immer in einen String umgewandelt
untergeordnete Prozesse.

In dieser Version werden Werte beim Zuweisen zu %ENV sofort in Zeichenfolgen umgewandelt und konvertiert
soll nur eine Bytefolge sein.

Erstens muss es sich nur um eine Zeichenfolge handeln. Dann ist die Zeichenfolge utf8 und das Äquivalent
Wenn „utf8::downgrade()“ funktioniert, wird dieses Ergebnis verwendet. andernfalls das Äquivalent von
Es wird „utf8::encode()“ verwendet und eine Warnung vor breiten Zeichen ausgegeben („Diagnose“).

"benötigen" Matrizen für unlesbar Dateien
Wenn „require“ auf eine nicht lesbare Datei stößt, wird diese nun abgebrochen. Früher wurde die Datei ignoriert und
Durchsuchen Sie die Verzeichnisse in @INC [perl #113422] weiter.

„gv_fetchmeth_*“ und SUPER
Die verschiedenen XS-Funktionen „gv_fetchmeth_*“, die zur Behandlung eines Pakets verwendet werden, dessen Name mit endet
„::SUPER“ speziell. Eine Methodensuche im Paket „Foo::SUPER“ würde als behandelt werden
Nachschlagen der Methode „SUPER“ im Paket „Foo“. Dies ist nicht mehr der Fall. Ein „SUPER“ machen
Übergeben Sie bei der Suche den „Foo“-Stash und das „GV_SUPER“-Flag.

„Split“ ist zuerst Argument is mehr konsequent interpretiert
Nach einigen Änderungen früher in Version 5.17 wurde das Verhalten von „split“ vereinfacht: Wenn die
Wenn das PATTERN-Argument zu einer Zeichenfolge ausgewertet wird, die ein Leerzeichen enthält, wird es auf die gleiche Weise behandelt wie a
wörtlich Zeichenfolge, die einmal ein Leerzeichen enthielt.

Einstellungen


Modul Umzüge
Die folgenden Module werden in einer zukünftigen Version aus der Kerndistribution entfernt
muss zu diesem Zeitpunkt über CPAN installiert werden. Verteilungen auf CPAN, die erforderlich sind
Diese Module müssen als Voraussetzungen aufgeführt werden.

Die Kernversionen dieser Module geben jetzt Warnungen der Kategorie „veraltet“ aus, um darauf aufmerksam zu machen
Sie auf diese Tatsache. Um diese veralteten Warnungen zu unterdrücken, installieren Sie die betreffenden Module
von CPAN.

Beachten Sie, dass dies (mit seltenen Ausnahmen) gute Module sind, zu denen Sie ermutigt werden
weiterhin verwenden. Ihr Ausschluss vom Kern hängt in erster Linie von ihrer Notwendigkeit ab
Bootstrapping einer voll funktionsfähigen, CPAN-fähigen Perl-Installation, normalerweise kein Anlass zur Sorge
über ihr Design.

Codierung
Von der Verwendung dieses Pragmas wird jetzt dringend abgeraten. Es verschmilzt die Kodierung von
Quelltext mit der Kodierung von I/O-Daten, interpretiert Escape-Sequenzen im Quelltext neu
Text (eine fragwürdige Wahl) und führt den UTF-8-Fehler in die gesamte Laufzeitverarbeitung von ein
Zeichenketten. Es ist wie vorgesehen kaputt und nicht mehr zu reparieren.

Informationen zur Verwendung von Nicht-ASCII-Literalzeichen im Quelltext finden Sie unter utf8. Für
Informationen zum Umgang mit textuellen E/A-Daten finden Sie unter „Kodieren und öffnen“.

Archiv::Extrahieren
B::Lint
B::Lint::Debug
CPANPLUS und alle enthaltenen „CPANPLUS::*“-Module
Entwickeln::InnerPackage
Log::Nachricht
Log::Message::Config
Log::Message::Handler
Log::Message::Item
Log::Message::Simple
Modul::steckbar
Module::Pluggable::Object
Object::Accessor
Pod::LaTeX
Begriff::UI
Begriff::UI::Geschichte

Veraltete Versorgungsunternehmen
Die folgenden Dienstprogramme werden in einer zukünftigen Version aus der Kerndistribution entfernt
Die zugehörigen Module sind veraltet. Sie bleiben mit dem verfügbar
anwendbare CPAN-Distribution.

cpanp
„cpanp-run-perl“
cpan2dist
Diese Artikel sind Teil der „CPANPLUS“-Distribution.

pod2latex
Dieser Artikel ist Teil der „Pod::LaTeX“-Distribution.

PL_sv_objcount
Diese interpreterglobale Variable wird verwendet, um die Gesamtzahl der Perl-Objekte im zu verfolgen
Dolmetscher. Es wird nicht mehr gepflegt und wird in Perl v5.20 vollständig entfernt.

Fünf zusätzlich Zeichen sollte be entkam in Muster mit "/X"
Wenn ein reguläres Ausdrucksmuster mit „/x“ kompiliert wird, behandelt Perl 6 Zeichen als weiß
zu ignorierende Leerzeichen wie SPACE und TAB. Unicode empfiehlt jedoch 11 Zeichen
so behandelt. Wir werden dies in einer zukünftigen Perl-Version berücksichtigen. In der Zwischenzeit verwenden
Wenn eines der fehlenden Zeichen angezeigt wird, wird eine veraltete Warnung ausgegeben, sofern diese Option nicht deaktiviert ist. Der
Fünf Zeichen sind:

U+0085 NÄCHSTE ZEILE
U+200E MARKIERUNG VON LINKS NACH RECHTS
U+200F RECHTS-nach-LINKS-MARKE
U+2028 LINIENTEILER
U+2029 PARAGRAPH SEPARATOR

Benutzerdefinierten Zaubernamen mit überraschend Leerzeichen
Ein benutzerdefinierter Zeichenname mit nachgestellten oder mehreren Leerzeichen hintereinander ist wahrscheinlich ein Tippfehler.
Dies generiert nun bei der Definition eine Warnung, vorausgesetzt, dass dies der Fall sein wird
Es ist unwahrscheinlich, dass der überschüssige Leerraum eingeschlossen wird.

Verschiedene XS-aufrufbar Funktionen sind jetzt an veraltet
Alle zur Klassifizierung von Zeichen verwendeten Funktionen werden aus einer zukünftigen Version von entfernt
Perl und sollte nicht verwendet werden. Mit teilnehmenden C-Compilern (z. B. gcc) können beliebige kompiliert werden
Wenn eine Datei diese verwendet, wird eine Warnung generiert. Diese waren nicht für die Öffentlichkeit bestimmt
verwenden; Für die meisten gibt es gleichwertige, schnellere Makros.

Siehe „Zeichenklassen“ in Perlapi. Die vollständige Liste lautet:

„is_uni_alnum“, „is_uni_alnumc“, „is_uni_alnumc_lc“, „is_uni_alnum_lc“, „is_uni_alpha“,
„is_uni_alpha_lc“, „is_uni_ascii“, „is_uni_ascii_lc“, „is_uni_blank“, „is_uni_blank_lc“,
„is_uni_cntrl“, „is_uni_cntrl_lc“, „is_uni_digit“, „is_uni_digit_lc“, „is_uni_graph“,
„is_uni_graph_lc“, „is_uni_idfirst“, „is_uni_idfirst_lc“, „is_uni_lower“,
„is_uni_lower_lc“, „is_uni_print“, „is_uni_print_lc“, „is_uni_punct“, „is_uni_punct_lc“,
„is_uni_space“, „is_uni_space_lc“, „is_uni_upper“, „is_uni_upper_lc“, „is_uni_xdigit“,
„is_uni_xdigit_lc“, „is_utf8_alnum“, „is_utf8_alnumc“, „is_utf8_alpha“, „is_utf8_ascii“,
„is_utf8_blank“, „is_utf8_char“, „is_utf8_cntrl“, „is_utf8_digit“, „is_utf8_graph“,
„is_utf8_idcont“, „is_utf8_idfirst“, „is_utf8_lower“, „is_utf8_mark“,
„is_utf8_perl_space“, „is_utf8_perl_word“, „is_utf8_posix_digit“, „is_utf8_print“,
„is_utf8_punct“, „is_utf8_space“, „is_utf8_upper“, „is_utf8_xdigit“, „is_utf8_xidcont“,
„is_utf8_xidfirst“.

Darüber hinaus sind diese drei Funktionen, die nie richtig funktioniert haben, veraltet:
„to_uni_lower_lc“, „to_uni_title_lc“ und „to_uni_upper_lc“.

Sicher selten verwendet of umgekehrte Schrägstriche . Regexes sind jetzt an veraltet
Es gibt drei Zeichenpaare, die Perl im Normalfall als Metazeichen erkennt
Ausdrucksmuster: „{}“, „[]“ und „()“. Diese können auch zur Abgrenzung von Mustern verwendet werden,
wie in:

m{foo}
s(foo)(bar)

Da es sich um Metazeichen handelt, haben sie für reguläre Ausdrucksmuster eine besondere Bedeutung.
und es stellt sich heraus, dass man diese besondere Bedeutung nicht mit den normalen Mitteln ausschalten kann
ihnen einen Backslash voranzustellen, wenn Sie sie paarweise innerhalb eines durch begrenzten Musters verwenden
ihnen. Zum Beispiel in

m{foo\{1,3\}}

Die Backslashes ändern das Verhalten nicht, und dies entspricht „fo“, gefolgt von einem to
drei weitere Vorkommen von „o“.

Solche Verwendungen, bei denen sie als Metazeichen interpretiert werden, sind äußerst selten; Wir
Ich glaube, es gibt zum Beispiel keine im gesamten CPAN. Daher sollte sich diese Abwertung auswirken
sehr wenig Code. Es weist jedoch darauf hin, dass ein solcher Code geändert werden muss
wird es uns wiederum ermöglichen, das Verhalten in zukünftigen Perl-Versionen so zu ändern, dass die
Backslashes haben tatsächlich eine Wirkung, und zwar ohne Angst, dass wir stillschweigend etwas Bestehendes zerstören
Code.

Spaltung die Token „(?“ und „(*“ in regulär Ausdrücke
Eine veraltete Warnung wird jetzt ausgegeben, wenn „(“ und „?“ durch Leerzeichen oder getrennt sind
Kommentare in „(?...)“ regulären Ausdruckskonstrukten. Ebenso, wenn „(“ und „*“ sind
getrennt in „(*VERB...)“-Konstrukte.

Vor PerlIO IO Realisierungen
Theoretisch können Sie Perl derzeit ohne PerlIO erstellen. Stattdessen würden Sie einen Wrapper verwenden
um stdio oder sfio. In der Praxis ist dies nicht sehr nützlich. Es ist nicht gut getestet und
Ohne jegliche Unterstützung für IO-Layer oder (also) Unicode ist es kein großes Perl. Gebäude
ohne PerlIO wird höchstwahrscheinlich in der nächsten Perl-Version entfernt.

PerlIO unterstützt eine „stdio“-Schicht, wenn stdio-Nutzung gewünscht ist. Ebenso könnte eine SFIO-Schicht sein
bei Bedarf in Zukunft produziert werden.

Future Einstellungen


· Plattformen ohne Support-Infrastruktur

Sowohl Windows CE als auch z/OS wurden in der Vergangenheit nicht ausreichend gewartet, und dies ist auch derzeit der Fall
Weder wurde der Bau erfolgreich abgeschlossen, noch wurden regelmäßig Rauchtests durchgeführt. Die Bemühungen sind im Gange
Diese Situation zu ändern, sollte jedoch nicht als selbstverständlich angesehen werden, dass die Plattformen
sind sicher und unterstützt. Wenn sie nicht baubar werden und regelmäßig geraucht werden, unterstützen Sie sie
denn sie werden möglicherweise in zukünftigen Versionen aktiv entfernt. Wenn Sie Interesse daran haben
Plattformen und Sie können Ihre Zeit, Ihr Fachwissen oder Ihre Hardware zur Verfügung stellen, um diese zu unterstützen
Plattformen, informieren Sie bitte die Perl-Entwicklung per E-Mail
"[E-Mail geschützt] ".

Einige Plattformen, die ansonsten völlig tot erscheinen, stehen ebenfalls auf der engeren Auswahlliste
Entfernung zwischen jetzt und v5.20.0:

GD/UX
NeXT

Wir halten es auch für wahrscheinlich, dass aktuelle Versionen von Perl kein AmigaOS mehr erstellen werden,
DJGPP, NetWare (nativ), OS/2 und Plan 9. Wenn Sie Perl auf einer solchen Plattform verwenden
und daran interessiert sind, die Zukunft von Perl sicherzustellen, kontaktieren Sie uns bitte.

Wir glauben, dass Perl schon lange nicht mehr in der Lage ist, auf Mixed-Endian-Architekturen aufzubauen (z
wie PDP-11s) und beabsichtigen, den verbleibenden Supportcode zu entfernen. Ebenso Code
Die Unterstützung der lange gepflegten GNU-DLD wird bald entfernt, wenn niemand sie erstellt
sich selbst als aktiver Benutzer bekannt.

· Vertauschen von $< und $>

Perl hat die Redewendung unterstützt, $< und $> (und ebenso $( und $)) gegen zu tauschen
Lassen Sie die Berechtigungen seit 5.0 vorübergehend fallen, wie folgt:

($<, $>) = ($>, $<);

Diese Redewendung verändert jedoch die tatsächliche Benutzer-/Gruppen-ID, was unerwünschte Nebenwirkungen haben kann.
Effekte, ist auf keiner von Perl unterstützten Plattform mehr nützlich und verkompliziert die
Implementierung dieser Variablen und Listenzuweisung im Allgemeinen.

Alternativ empfiehlt sich die Zuweisung nur an $>:

lokal $> = $<;

Siehe auch: Setuid entmystifizierthttp://www.cs.berkeley.edu/~daw/papers/setuid-
usenix02.pdf>.

· „Microperl“, seit langem kaputt und mit unklarem derzeitigen Zweck, wird entfernt.

· Überarbeitung der „\Q“-Semantik in Zeichenfolgen mit doppelten Anführungszeichen in Kombination mit anderen Escapezeichen.

Es gibt mehrere Fehler und Inkonsistenzen bei Kombinationen von „\Q“ und Escapezeichen
wie „\x“, „\L“ usw. innerhalb eines „\Q...\E“-Paares. Diese müssen behoben werden, und zwar
wird zwangsläufig das aktuelle Verhalten ändern. Die Änderungen sind noch nicht beschlossene Sache.

· Verwendung von $x, wobei „x“ für ein beliebiges tatsächliches (nicht druckbares) C0-Steuerzeichen steht
in einer zukünftigen Perl-Version nicht zulässig. Verwenden Sie stattdessen „${x}“ (wobei „x“ wiederum für a steht
Steuerzeichen), oder besser, $^A , wobei „^“ ein Caretzeichen (CIRCUMFLEX ACCENT) ist und „A“
steht für eines der Zeichen, die am Ende von „OPERATORUNTERSCHIEDE“ in aufgeführt sind
perlebcdic.

Leistung Erweiterung


· Listen lexikalischer Variablendeklarationen („my($x, $y)“) sind jetzt auf a optimiert
Einzeloperation und sind daher schneller als zuvor.

· Eine neue C-Präprozessordefinition „NO_TAINT_SUPPORT“ wurde hinzugefügt, die, wenn sie gesetzt ist, Perl deaktiviert
Taint-Unterstützung insgesamt. Die Verwendung der Befehlszeilenflags -T oder -t führt zu einem schwerwiegenden Fehler
Fehler. Beachten Sie, dass dies sowohl bei Kerntests als auch bei vielen Tests einer CPAN-Distribution der Fall ist
scheitern mit dieser Änderung. Auf der anderen Seite bietet es einen kleinen Leistungsvorteil
reduzierte Verzweigung.

Do nicht ermöglichen fehlen uns die Worte. es sei denn Sie kennt genau was Sie sind bekommen sich selbst in.

· „Pack“ mit konstanten Argumenten wird nun in den meisten Fällen konstant gefaltet [perl #113470].

· Beschleunigen Sie den Vergleich regulärer Ausdrücke mit Unicode-Eigenschaften. Der größte Gewinn
steht für „\X“, den Unicode „erweiterten Graphemcluster“. Der Gewinn dafür beträgt etwa 35 % -
40 %. In Klammern gesetzte Zeichenklassen, z. B. „[0-9\x{100}]“, die die oben genannten Codepunkte enthalten
255 sind jetzt auch schneller.

· Auf Plattformen, die dies unterstützen, sind mehrere frühere Makros jetzt als statische Inline-Makros implementiert
Funktionen. Dies sollte die Dinge auf Nicht-GCC-Plattformen etwas beschleunigen.

· Die Optimierung von Hashes im booleschen Kontext wurde um Auswirkungen erweitert
„scalar(%hash)“, „%hash ? ... : ...“ und „sub { %hash || ... }“.

· Filetest-Operatoren verwalten den Stack wesentlich effizienter.

· Globs, die in einem numerischen Kontext verwendet werden, werden jetzt in den meisten Fällen direkt nummeriert und nicht mehr
wird durch Stringifizierung numeriert.

· Der Wiederholungsoperator „x“ wird jetzt zur Kompilierzeit if auf eine einzige Konstante reduziert
Wird im Skalarkontext mit konstanten Operanden und ohne Klammern links aufgerufen
Operand.

Module und Pragmatisch


New Module und Pragmatisch
· Config::Perl::V Version 0.16 wurde als Dual-Life-Modul hinzugefügt. Es bietet
Strukturierter Datenabruf der „Perl-V“-Ausgabe, einschließlich Informationen, die nur dem Benutzer bekannt sind
„Perl“-Binärdatei und nicht über Config verfügbar.

Aktualisiert Module und Pragmatisch
Führen Sie Folgendes aus, um eine vollständige Liste der Updates anzuzeigen:

$ corelist --diff 5.16.0 5.18.0

Sie können 5.16.0 auch durch Ihre Lieblingsversion ersetzen.

· Archive::Extract wurde auf 0.68 aktualisiert.

Umgehen Sie einen Grenzfall unter Linux mit Busybox's unzip.

· Archive::Tar wurde auf 1.90 aktualisiert.

ptar unterstützt jetzt die Option -T sowie Optionen ohne Striche [rt.cpan.org #75473],
[rt.cpan.org #75475].

Als UTF-8 gekennzeichnete Dateinamen automatisch kodieren [rt.cpan.org #75474].

Verwenden Sie „tell“ nicht für IO::Zlib-Handles [rt.cpan.org #64339].

Versuchen Sie nicht, Symlinks zu „chownen“.

· Autodie wurde auf 2.13 aktualisiert.

„autodie“ spielt jetzt gut mit dem „offenen“ Pragma.

· B wurde auf 1.42 aktualisiert.

Die „Stashoff“-Methode von COPs wurde hinzugefügt. Dies ermöglicht den Zugriff auf eine interne
Feld hinzugefügt in Perl 5.16 unter Thread-Builds [Perl #113034].

„B::COP::stashpv“ unterstützt jetzt UTF-8-Paketnamen und eingebettete NULs.

Alle „CVf_*“ und „GVf_*“ und weitere SV-bezogene Flagwerte werden jetzt als Konstanten bereitgestellt
im Namensraum „B::“ und für den Export verfügbar. Die Standard-Exportliste hat dies nicht
geändert.

Dadurch funktioniert das Modul mit der neuen Pad-API.

· B::Concise wurde auf 0.95 aktualisiert.

Die Option „-nobanner“ wurde behoben und „Formate“ können jetzt ausgegeben werden. Bei bestandenem a
Wenn Sie den zu sichernden Unternamen angeben, wird auch geprüft, ob es sich um den Namen eines Formats handelt. Wenn ein
Sub und ein Format denselben Namen haben, werden beide ausgegeben.

Dadurch wird Unterstützung für die neuen Flags „OpMAYBE_TRUEBOOL“ und „OPpTRUEBOOL“ hinzugefügt.

· B::Debug wurde auf 1.18 aktualisiert.

Dadurch wird (experimentell) Unterstützung für „B::PADLIST“ hinzugefügt, das in Perl 5.17.4 hinzugefügt wurde.

· B::Deparse wurde auf 1.20 aktualisiert.

Vermeiden Sie Warnungen, wenn Sie unter „perl -w“ ausgeführt werden.

Es analysiert jetzt Schleifensteuerungen mit der richtigen Priorität und mehreren Anweisungen in
Eine „Format“-Zeile wird nun auch korrekt depariert.

Diese Version unterdrückt abschließende Semikolons in Formaten.

Diese Version fügt Stub-Deparing für lexikalische Unterroutinen hinzu.

Es stirbt nicht mehr ab, wenn „sort“ ohne Argumente depariert wird. Das wird jetzt korrekt weggelassen
Komma für „system $prog @args“ und „exec $prog @args“.

· Bignum, Bigint und Bigrat wurden auf 0.33 aktualisiert.

Die Überschreibungen für „hex“ und „oct“ wurden neu geschrieben, wodurch mehrere Probleme beseitigt wurden,
und eine inkompatible Änderung vornehmen:

· Früher wurde entweder „use bigint“ oder „use bigrat“ später kompiliert
Vorrang vor dem anderen, was dazu führt, dass „hex“ und „oct“ das andere Pragma nicht respektieren
wenn im Geltungsbereich.

· Die Verwendung eines dieser drei Pragmata würde irgendwo anders in der „Hex“ und „Okt“ verursachen
Programm, um ihre Argumente im Listenkontext auszuwerten und sie daran zu hindern
leitet $_ ab, wenn es ohne Argumente aufgerufen wird.

· Die Verwendung eines dieser drei Pragmata würde dazu führen, dass „oct(“1234“)“ 1234 zurückgibt (für jedes).
Nummer, die nicht mit 0 beginnt) irgendwo im Programm angeben. Jetzt wird „1234“ übersetzt
von Oktal zu Dezimal, unabhängig davon, ob es im Rahmen des Pragmas liegt oder nicht.

· Die globalen Überschreibungen, die die lexikalische Verwendung von „Hex“ und „Okt“ erleichtern, werden jetzt berücksichtigt
alle vorhandenen Außerkraftsetzungen, die vor der Installation der neuen Außerkraftsetzungen vorhanden waren,
auf sie außerhalb des Geltungsbereichs von „use bignum“ zurückgreifen.

· „use bignum „hex““, „use bignum „oct““ und ähnliche Aufrufe für bigint und
bigrat exportiert jetzt eine „Hex“- oder „Okt“-Funktion, anstatt eine globale Funktion bereitzustellen
überschreiben.

· Carp wurde auf 1.29 aktualisiert.

Carp ist nicht länger verwirrt, wenn „Caller“ für ein bereits gesendetes Paket „undef“ zurückgibt
gelöscht.

Die Funktionen „longmess()“ und „shortmess()“ sind jetzt dokumentiert.

· CGI wurde auf 3.63 aktualisiert.

Nicht erkannte HTML-Escape-Sequenzen werden jetzt besser behandelt, problematisches Nachstellen
Zeilenumbrüche werden danach nicht mehr eingefügt Tags durch „startform()“ oder „start_form()“,
und falsche „Unsichere Abhängigkeit“-Warnungen, die bei einigen Perl-Versionen auftauchen, sind jetzt vorhanden
umgangen.

· Class::Struct wurde auf 0.64 aktualisiert.

Der Konstruktor berücksichtigt jetzt überschriebene Zugriffsmethoden [perl #29230].

· Compress::Raw::Bzip2 wurde auf 2.060 aktualisiert.

Der Missbrauch der „magischen“ API von Perl wurde behoben.

· Compress::Raw::Zlib wurde auf 2.060 aktualisiert.

Aktualisieren Sie die mitgelieferte zlib auf Version 1.2.7.

Beheben Sie Buildfehler unter Irix, Solaris und Win32 sowie beim Erstellen als C++
[rt.cpan.org #69985], [rt.cpan.org #77030], [rt.cpan.org #75222].

Der Missbrauch der „magischen“ API von Perl wurde behoben.

„compress()“, „uncompress()“, „memGzip()“ und „memGunzip()“ wurden beschleunigt um
Dadurch wird die Parametervalidierung effizienter.

· CPAN::Meta::Requirements wurde auf 2.122 aktualisiert.

Behandeln Sie Undef-Anforderungen für „from_string_hash“ als 0 (mit einer Warnung).

Methode „requirements_for_module“ hinzugefügt.

· CPANPLUS wurde auf 0.9135 aktualisiert.

Hinzufügen zulassen blib/script zu PFAD.

Speichern Sie den Verlauf zwischen Aufrufen der Shell.

Behandeln Sie mehrere „makemakerargs“- und „makeflags“-Argumente besser.

Dadurch werden Probleme mit der SQLite-Quell-Engine behoben.

· Data::Dumper wurde auf 2.145 aktualisiert.

Es wurde optimiert, um nur bei Bedarf einen sichtbaren Skalar-Hash zu erstellen, was die Geschwindigkeit erhöht
Serialisierung drastisch steigern.

Zusätzliche Tests wurden hinzugefügt, um Anweisung, Verzweigung, Bedingung und zu verbessern
Unterprogrammabdeckung. Auf der Grundlage der Abdeckungsanalyse wurden einige Interna von
Dumper.pm wurden überarbeitet. Fast alle Methoden sind mittlerweile dokumentiert.

· DB_File wurde auf 1.827 aktualisiert.

Das Haupt-Perl-Modul verwendet nicht mehr das „@_“-Konstrukt.

· Devel::Peek wurde auf 1.11 aktualisiert.

Dies behebt die Kompilierung mit C++-Compilern und sorgt dafür, dass das Modul mit dem neuen Pad funktioniert
API.

· Digest::MD5 wurde auf 2.52 aktualisiert.

Korrigieren Sie den OO-Fallback „Digest::Perl::MD5“ [rt.cpan.org #66634].

· Digest::SHA wurde auf 5.84 aktualisiert.

Dadurch wird ein Double-Free-Fehler behoben, der in einigen Fällen zu Schwachstellen geführt haben könnte.

· DynaLoader wurde auf 1.18 aktualisiert.

Dies ist auf eine geringfügige Codeänderung im XS für die VMS-Implementierung zurückzuführen.

Dies behebt Warnungen bezüglich der Verwendung von „CODE“-Abschnitten ohne einen „OUTPUT“-Abschnitt.

· Encode wurde auf 2.49 aktualisiert.

Der Mac-Alias ​​x-mac-ce wurde hinzugefügt und verschiedene Fehler behoben
Encode::Unicode, Encode::UTF7 und Encode::GSM0338.

· Env wurde auf 1.04 aktualisiert.

Seine SPLICE-Implementierung verhält sich im Listenkontext nicht mehr schlecht.

· ExtUtils::CBuilder wurde auf 0.280210 aktualisiert.

Manifestdateien werden jetzt korrekt für die Versionen von VC++ eingebettet, die davon Gebrauch machen
ihnen. [perl #111782, #111798].

Eine Liste der zu exportierenden Symbole kann nun unter Windows wie auch unter anderen an „link()“ übergeben werden
Betriebssysteme [perl #115100].

· ExtUtils::ParseXS wurde auf 3.18 aktualisiert.

Der generierte C-Code vermeidet nun das unnötige Inkrementieren von „PL_amagic_generation“.
Perl-Versionen, bei denen dies automatisch erfolgt (oder bei aktuellen Perl-Versionen, bei denen die Variablen-Nr
Länger existiert).

Dies vermeidet eine falsche Warnung für initialisierte XSUB-Nichtparameter [perl #112776].

· File::Copy wurde auf 2.26 aktualisiert.

„copy()“ setzt Dateien beim Kopieren in dasselbe Verzeichnis nicht mehr auf Null, und das auch jetzt
schlägt fehl (was seit langem dokumentiert ist), wenn versucht wird, eine Datei zu kopieren
sich.

· File::DosGlob wurde auf 1.10 aktualisiert.

Der interne Cache mit Dateinamen, der für jeden Aufrufer gespeichert wird, wird dabei nun freigegeben
Anrufer wird freigelassen. Dies bedeutet, dass „file::DosGlob 'glob'; eval 'scalar <*>'“ nicht mehr verwendet wird
Speicherverlust.

· File::Fetch wurde auf 0.38 aktualisiert.

Die Option „file_default“ für URLs hinzugefügt, die keine Dateikomponente haben.

Verwenden Sie „File::HomeDir“, sofern verfügbar, und geben Sie „PERL5_CPANPLUS_HOME“ an, um das zu überschreiben
automatische Erkennung.

Immer neu abrufen KONTROLLSUMMEN wenn „fetchdir“ gesetzt ist.

· File::Find wurde auf 1.23 aktualisiert.

Dies behebt die inkonsistente Unixy-Pfadbehandlung auf VMS.

Einzelne Dateien können jetzt in der Liste der zu durchsuchenden Verzeichnisse angezeigt werden [perl #59750].

· File::Glob wurde auf 1.20 aktualisiert.

File::Glob hatte genau den gleichen Fix wie File::DosGlob. Da es Perls Eigenes ist
Der „glob“-Operator selbst verwendet (außer auf VMS), das bedeutet „eval ‚scalar <*>‘“ nicht mehr
Lecks.

Eine durch Leerzeichen getrennte Liste von Mustern führt nicht mehr zu langen Ergebnislisten
Speicherbeschädigung oder Abstürze. Dieser Fehler wurde in Perl 5.16.0 eingeführt. [perl #114984]

· File::Spec::Unix wurde auf 3.40 aktualisiert.

„abs2rel“ könnte zu falschen Ergebnissen führen, wenn zwei relative Pfade oder der Stamm angegeben werden
Verzeichnis zweimal [perl #111510].

· File::stat wurde auf 1.07 aktualisiert.

„File::stat“ ignoriert das Filetest-Pragma und warnt, wenn es in Kombination verwendet wird
damit. Aber es war keine Warnung für „-r“. Dies wurde behoben [perl #111640].

„-p“ funktioniert jetzt und gibt für Pipes nicht „false“ zurück [perl #111638].

Zuvor lieferten die überladenen Operatoren „-x“ und „-X“ von „File::stat“ nicht das Richtige
Ergebnisse für Verzeichnisse oder ausführbare Dateien bei Ausführung als Root. Das waren sie gewesen
Behandeln Sie ausführbare Berechtigungen für Root wie für jeden anderen Benutzer
Gruppenmitgliedschaftstests etc für Dateien, die nicht Root gehören. Sie folgen nun dem Richtigen
Unix-Verhalten – für ein Verzeichnis gelten sie immer und für eine Datei, falls vorhanden
Wenn drei Ausführungsberechtigungsbits gesetzt sind, melden sie, dass Root die Datei ausführen kann.
Die in Perl integrierten Operatoren „-x“ und „-X“ waren immer korrekt.

· File::Temp wurde auf 0.23 aktualisiert

Behebt verschiedene Fehler beim Entfernen von Verzeichnissen. Verschiebt das Aufheben der Verknüpfung temporärer Dateien, wenn die
Das anfängliche Aufheben der Verknüpfung schlägt fehl, wodurch Probleme auf NFS behoben werden.

· GDBM_File wurde auf 1.15 aktualisiert.

Der undokumentierte optionale fünfte Parameter für „TIEHASH“ wurde entfernt. Das war
soll die Kontrolle über den Rückruf ermöglichen, der von „gdbm*“-Funktionen im Falle eines schwerwiegenden Fehlers verwendet wird
Fehler (z. B. Dateisystemprobleme), funktionierten jedoch nicht (und hätten auch nie funktionieren können).
Kein Code im CPAN hat überhaupt versucht, es zu verwenden. Der Rückruf ist nun immer der vorherige
Standardeinstellung: „croak“. Auf einigen Plattformen gibt es Probleme mit der „C“-„Quak“-Funktion
Die angerufenen Probleme wurden ebenfalls gelöst.

· Hash::Util wurde auf 0.15 aktualisiert.

„hash_unlocked“ und „hashref_unlocked“ geben jetzt „true“ zurück, wenn der Hash entsperrt ist.
anstatt immer false zurückzugeben [perl #112126].

„hash_unlocked“, „hashref_unlocked“, „lock_hash_recurse“ und „unlock_hash_recurse“ sind
Jetzt exportierbar [perl #112126].

Zwei neue Funktionen, „hash_locked“ und „hashref_locked“, wurden hinzugefügt. Seltsamerweise,
diese beiden Funktionen wurden bereits exportiert, obwohl sie nicht existierten [perl
#112126].

· HTTP::Tiny wurde auf 0.025 aktualisiert.

Fügen Sie SSL-Verifizierungsfunktionen hinzu [github #6], [github #9].

Fügen Sie die endgültige URL in den Antwort-Hashref ein.

Fügen Sie die Option „local_address“ hinzu.

Dadurch wird die SSL-Unterstützung verbessert.

· IO wurde auf 1.28 aktualisiert.

„sync()“ kann jetzt für schreibgeschützte Dateihandles aufgerufen werden [perl #64772].

IO::Socket versucht stärker, Socket-Informationen zwischenzuspeichern oder auf andere Weise abzurufen.

· IPC::Cmd wurde auf 0.80 aktualisiert.

Verwenden Sie „POSIX::_exit“ anstelle von „exit“ in „run_forked“ [rt.cpan.org #76901].

· IPC::Open3 wurde auf 1.13 aktualisiert.

Die Funktion „open3()“ verwendet seitdem nicht mehr „POSIX::close()“ zum Schließen von Dateideskriptoren
Dadurch wird die Ref-Zählung von Dateideskriptoren durch PerlIO in Fällen unterbrochen, in denen die
Dateideskriptoren werden von PerlIO-Streams gemeinsam genutzt, was zu Versuchen führt, die Datei zu schließen
Deskriptoren ein zweites Mal, wenn solche PerlIO-Streams später geschlossen werden.

· Locale::Codes wurde auf 3.25 aktualisiert.

Es enthält einige neue Codes.

· Memoize wurde auf 1.03 aktualisiert.

Korrigieren Sie die Cache-Option „MERGE“.

· Module::Build wurde auf 0.4003 aktualisiert.

Fehler behoben, bei dem in Modulen ohne $VERSION möglicherweise eine Version von „0“ aufgeführt ist
'stellt' Metadaten bereit, die durch PAUSE abgelehnt werden.

Fehler in PodParser behoben, der Ziffern in Modulnamen zulässt.

Fehler behoben, bei dem die doppelte Angabe von Argumenten dazu führte, dass sie zu Arrays wurden, was zu …
Installationspfade wie ARRAY(0xdeadbeef)/lib/Foo.pm.

Eine kleine Fehlerbehebung ermöglicht die Verwendung von Markup um den führenden „Namen“ in einer POD-„Zusammenfassung“
und es wurden einige Verbesserungen an der Dokumentation vorgenommen.

· Module::CoreList wurde auf 2.90 aktualisiert

Versionsinformationen werden jetzt als Delta gespeichert, was die Größe der Version erheblich reduziert
CoreList.pm Datei.

Dadurch wird die Kompatibilität mit älteren Perl-Versionen wiederhergestellt und die Corelist bereinigt
Daten für verschiedene Module.

· Module::Load::Conditional wurde auf 0.54 aktualisiert.

Korrigiert die Verwendung von „requires“ bei Perls, die in einem Pfad mit Leerzeichen installiert wurden.

Zu den verschiedenen Verbesserungen gehört die neue Verwendung von Module::Metadata.

· Module::Metadata wurde auf 1.000011 aktualisiert.

Die Erstellung eines Module::Metadata-Objekts für eine typische Moduldatei wurde beschleunigt
um etwa 40 %, und einige falsche Warnungen zu $VERSIONs wurden unterdrückt.

· Module::Pluggable wurde auf 4.7 aktualisiert.

Neben anderen Änderungen sind nun Auslöser für Ereignisse zulässig, was eine wirkungsvolle Möglichkeit darstellt
Verhalten zu ändern.

· Net::Ping wurde auf 2.41 aktualisiert.

Dies behebt einige Testfehler unter Windows.

· Opcode wurde auf 1.25 aktualisiert.

Reflektieren Sie die Entfernung des boolkeys-Opcodes und die Hinzufügung von clonecv, introcv
und padcv-Opcodes.

· Überlastung wurde auf 1.22 aktualisiert.

„keine Überlastung“ warnt jetzt vor ungültigen Argumenten, genau wie „Use-Überladung“.

· PerlIO::encoding wurde auf 0.16 aktualisiert.

Dies ist das Modul, das die I/O-Schicht „:encoding(...)“ implementiert. Es korrumpiert nicht mehr
Speicher oder stürzt ab, wenn das Codierungs-Back-End den Puffer neu zuordnet oder ihm einen gibt
Typeglob oder Shared-Hash-Key-Skalar.

· PerlIO::scalar wurde auf 0.16 aktualisiert.

Der bereitgestellte Pufferskalar darf jetzt nur Codepunkte 0xFF oder niedriger enthalten. [Perl
# 109828]

· Perl::OSType wurde auf 1.003 aktualisiert.

Dadurch wird ein Fehler bei der Erkennung des VOS-Betriebssystems behoben.

· Pod::Html wurde auf 1.18 aktualisiert.

Die Option „--libpods“ wurde wieder eingeführt. Es ist veraltet und seine Verwendung hat keine Auswirkungen
außer eine Warnung auszugeben, dass es nicht mehr unterstützt wird.

Denn die von pod2html generierten HTML-Dateien behaupten tatsächlich, einen UTF-8-Zeichensatz zu haben
Schreiben Sie die Dateien mit UTF-8 [perl #111446].

· Pod::Simple wurde auf 3.28 aktualisiert.

Es wurden zahlreiche Verbesserungen vorgenommen, vor allem an Pod::Simple::XHTML, das auch über eine verfügt
Kompatibilitätsänderung: Die Option „codes_in_verbatim“ ist jetzt standardmäßig deaktiviert. Sehen
cpan/Pod-Simple/ChangeLog für die vollständigen Einzelheiten.

· re wurde auf 0.23 aktualisiert

Einzelzeichen-[Klassen] wie „/[s]/“ oder „/[s]/i“ werden jetzt so optimiert, als ob sie es täten
nicht die Klammern haben, also „/s/“ oder „/s/i“.

Siehe Hinweis zu „op_comp“ im Abschnitt „Interne Änderungen“ unten.

· Safe wurde auf 2.35 aktualisiert.

Korrigieren Sie Interaktionen mit „Devel::Cover“.

Werten Sie den Code nicht unter „keine strenge Einstellung“ aus.

· Scalar::Util wurde auf Version 1.27 aktualisiert.

Behebung eines Überlastungsproblems mit „sum“.

„first“ und „reduce“ prüfen nun zuerst den Callback (also &zuerst(1) ist unzulässig).

„Tainted“ bei magischen Werten behoben [rt.cpan.org #55763].

Korrigieren Sie „Summe“ bei zuvor magischen Werten [rt.cpan.org #61118].

Korrektur des Lesens über das Ende eines festen Puffers hinaus [rt.cpan.org #72700].

· Search::Dict wurde auf 1.07 aktualisiert.

„Stat“ für Dateihandles ist nicht mehr erforderlich.

Verwenden Sie „fc“ zum Fallfalten.

· Socket wurde auf 2.009 aktualisiert.

Es wurden Konstanten und Funktionen für die IP-Multicast-Quellgruppenmitgliedschaft benötigt
zugegeben.

„unpack_sockaddr_in()“ und „unpack_sockaddr_in6()“ geben jetzt nur die IP-Adresse zurück
Skalarkontext und „inet_ntop()“ schützt jetzt vor Skalaren mit falscher Länge
eingelaufen.

Dies behebt einen nicht initialisierten Speicherlesevorgang.

· Storable wurde auf 2.41 aktualisiert.

Das Ändern von $_[0] innerhalb von „STORABLE_freeze“ führt nicht mehr zu Abstürzen [perl #112358].

Ein Objekt, dessen Klasse „STORABLE_attach“ implementiert, wird jetzt nur einmal aufgetaut, wenn es dort ist
Es gibt mehrere Verweise darauf in der Struktur, die aufgetaut wird [perl #111918].

Eingeschränkte Hashes wurden nicht immer korrekt aufgetaut [perl #73972].

Storable würde krächzen, wenn ein gesegnetes REF-Objekt mit „STORABLE_freeze()“ eingefroren würde.
Methode [perl #113880].

Es kann jetzt Vstrings korrekt einfrieren und auftauen. Dies führt zu einer leichten Inkompatibilität
Änderung des Speicherformats, sodass die Formatversion auf 2.9 erhöht wurde.

Dieses enthält verschiedene Bugfixes, darunter auch Kompatibilitätsfixes für ältere Versionen von
Umgang mit Perl und Vstring.

· Sys::Syslog wurde auf 0.32 aktualisiert.

Dies enthält mehrere Fehlerbehebungen im Zusammenhang mit „getservbyname()“, „setlogsock()“ und log
Levels in „syslog()“, zusammen mit Fixes für Windows, Haiku-OS und GNU/kFreeBSD. Sehen
cpan/Sys-Syslog/Changes für die vollständigen Einzelheiten.

· Term::ANSIColor wurde auf 4.02 aktualisiert.

Unterstützung für Kursivschrift hinzufügen.

Verbessern Sie die Fehlerbehandlung.

· Term::ReadLine wurde auf 1.10 aktualisiert. Dies behebt die Verwendung des cpan und cpanp
Shells unter Windows für den Fall, dass das aktuelle Laufwerk zufällig eine enthält \dev\tty
Datei.

· Test::Harness wurde auf 3.26 aktualisiert.

Glob-Semantik unter Win32 korrigieren [rt.cpan.org #49732].

Verwenden Sie nicht „Win32::GetShortPathName“, wenn Sie Perl aufrufen [rt.cpan.org #47890].

Ignorieren Sie -T beim Lesen von Shebang [rt.cpan.org #64404].

Behandeln Sie den Fall, in dem wir den Wartestatus des Tests nicht kennen, eleganter.

Machen Sie die Testzusammenfassungszeile „ok“ überschreibbar, damit sie in ein Plugin geändert werden kann
Lassen Sie die Ausgabe von beweisen, dass sie idempotent ist.

Führen Sie keine allgemein beschreibbaren Dateien aus.

· Text::Tabs und Text::Wrap wurden auf 2012.0818 aktualisiert. Unterstützung für Unicode
Beiden wurde die Kombination von Zeichen hinzugefügt.

· threads::shared wurde auf 1.31 aktualisiert.

Dadurch wird die Option hinzugefügt, vor Versuchen, Strukturen zu klonen, die dies nicht können, zu warnen oder diese zu ignorieren
geklont werden, anstatt in diesem Fall einfach bedingungslos zu sterben.

Dies fügt Unterstützung für zweiwertige Werte hinzu, wie sie von Scalar::Util::dualvar erstellt werden.

· Tie::StdHandle wurde auf 4.3 aktualisiert.

„READ“ berücksichtigt jetzt das Offset-Argument für „read“ [perl #112826].

· Time::Local wurde auf 1.2300 aktualisiert.

Sekundenwerte größer als 59, aber kleiner als 60 verursachen nicht mehr „timegm()“ und
„timelocal()“, um zu krächzen.

· Unicode::UCD wurde auf 0.53 aktualisiert.

Dadurch wird eine Funktion hinzugefügt all_casefolds() das gibt alle Casefolds zurück.

· Win32 wurde auf 0.47 aktualisiert.

Es wurden neue APIs zum Abrufen und Festlegen der aktuellen Codepage hinzugefügt.

Entfernt Module und Pragmatisch
· Version::Requirements wurde aus der Kerndistribution entfernt. Es ist verfügbar
unter einem anderen Namen: CPAN::Meta::Requirements.

Dokumentation


Änderungen zu Vorhanden Dokumentation
Perlschote

· Perlcheat wurde neu organisiert und einige neue Abschnitte wurden hinzugefügt.

perldaten

· Dokumentiert jetzt explizit das Verhalten von Hash-Initialisierungslisten, die enthalten
Doppelte Schlüssel.

perldiag

· Die Erklärung, dass symbolische Referenzen durch „strenge Referenzen“ verhindert werden, funktioniert nun nicht mehr
Gehen Sie davon aus, dass der Leser weiß, was symbolische Referenzen sind.

perlfaq

· perlfaq wurde mit Version 5.0150040 von CPAN synchronisiert.

perlfunc

· Der Rückgabewert von „pipe“ ist jetzt dokumentiert.

· Klare Dokumentation von „unserem“.

Verbrecher

· Schleifenkontrollverben („dump“, „goto“, „next“, „last“ und „redo“) hatten schon immer das
haben denselben Vorrang wie Zuweisungsoperatoren, dies wurde jedoch bisher nicht dokumentiert.

Diagnose

An der Diagnoseausgabe wurden folgende Ergänzungen oder Änderungen vorgenommen, einschließlich Warnungen
und fatale Fehlermeldungen. Die vollständige Liste der Diagnosemeldungen finden Sie unter perldiag.

New Diagnose
New Fehler

· Nicht abgeschlossenes Trennzeichen für dieses Dokument

Diese Meldung wird jetzt angezeigt, wenn die Beschriftung eines Dokuments hier ein Anführungszeichen enthält, aber
das letzte Anführungszeichen fehlt.

Dies ersetzt eine falsche und irreführende Fehlermeldung, dass das Etikett selbst nicht gefunden wurde
[Perl #114104].

· Panik: Untergeordneter Pseudoprozess wurde nie geplant

Dieser Fehler wird ausgelöst, wenn ein untergeordneter Pseudoprozess in der ithreads-Implementierung aktiviert ist
Windows wurde nicht innerhalb des zulässigen Zeitraums geplant und war daher nicht in der Lage, dies zu tun
richtig initialisieren [perl #88840].

· Der Gruppenname muss im regulären Ausdruck mit einem nicht-stelligen Wortzeichen beginnen. gekennzeichnet durch <-- HIER in
MS/

Dieser Fehler wurde für „(?&0)“ hinzugefügt, was ungültig ist. Früher wurde daraus ein
unverständliche Fehlermeldung [perl #101666].

· Ein undefinierter Wert kann nicht als Unterprogrammreferenz verwendet werden

Der Aufruf eines undefinierten Werts als Unterprogramm führt nun zu dieser Fehlermeldung. Es wurde verwendet
zu, wurde aber versehentlich deaktiviert, zunächst in Perl 5.004 für nicht-magische Variablen, und
dann in Perl v5.14 für magische (z. B. gebundene) Variablen. Mittlerweile wurde es restauriert. In
In der Zwischenzeit wurde undef als leere Zeichenfolge behandelt [perl #113576].

· Experimentelle „%s“-Abos nicht aktiviert

Um lexikalische Subs verwenden zu können, müssen Sie diese zunächst aktivieren:

keine Warnungen 'experimental::lexical_subs';
Verwenden Sie die Funktion „lexical_subs“;
mein Sub foo { ... }

New Warnungen

· „Strings mit Codepunkten über 0xFF können möglicherweise nicht in In-Memory-Dateihandles abgebildet werden“

· '%s' aufgelöst zu '\o{%s}%d'

· „Nachgestellte Leerzeichen in einer Charnames-Alias-Definition sind veraltet.“

· „Eine Folge mehrerer Leerzeichen in einer Charnames-Alias-Definition ist veraltet.“

· „Die Übergabe von fehlerhaftem UTF-8 an „%s“ ist veraltet.“

· Unterprogramm „&%s“ ist nicht verfügbar

(W-Abschluss) Während der Kompilierung versucht eine innere benannte Subroutine oder Auswertung
Erfassen Sie eine äußere lexikalische Unterroutine, die derzeit nicht verfügbar ist. Das kann passieren
aus einem von zwei Gründen. Erstens kann die lexikalische Unterroutine in einem Outer deklariert werden
anonyme Unterroutine, die noch nicht erstellt wurde. (Denken Sie daran, dass benannte Subs sind
werden zur Kompilierzeit erstellt, während anonyme Subs zur Laufzeit erstellt werden.) Zum Beispiel:

sub { mein sub a {...} sub f { \&a } }

Zum Zeitpunkt der Erstellung von f kann es den aktuellen Sub „a“ nicht erfassen, da der
Die anonyme Unterroutine wurde noch nicht erstellt. Umgekehrt gibt das Folgende keine Antwort
Warnung, da die anonyme Unterroutine inzwischen erstellt wurde und aktiv ist:

sub { my sub a {...} eval 'sub f { \&a }' }->();

Die zweite Situation wird dadurch verursacht, dass eine Auswertung auf eine Variable zugreift, die nicht mehr vorhanden ist
Umfang, zum Beispiel

sub f {
mein Sub ein {...}
sub { eval '\&a' }
}
f()->();

Wenn hier „\&a“ in der Auswertung kompiliert wird, ist f() derzeit nicht vorhanden
ausgeführt, sodass sein &a nicht für die Erfassung verfügbar ist.

· „%s“-Unterroutine &%s maskiert frühere Deklarationen in demselben %s

(W Sonstiges) Eine „my“- oder „state“-Unterroutine wurde im aktuellen Gültigkeitsbereich oder neu deklariert
-Anweisung, wodurch jeder Zugriff auf die vorherige Instanz effektiv eliminiert wird. Das ist
fast immer ein Tippfehler. Beachten Sie, dass die frühere Unterroutine weiterhin ausgeführt wird
bestehen bis zum Ende des Bereichs oder bis alle Abschlussverweise darauf zerstört werden.

· Die %s-Funktion ist experimentell

(S experimentell) Diese Warnung wird ausgegeben, wenn Sie eine experimentelle Funktion über aktivieren
„Funktion nutzen“. Unterdrücken Sie einfach die Warnung, wenn Sie die Funktion nutzen möchten, es aber wissen
dass Sie dabei das Risiko eingehen, eine experimentelle Funktion zu verwenden, die möglicherweise
ändern oder in einer zukünftigen Perl-Version entfernt werden:

keine Warnungen „experimental::lexical_subs“;
Verwenden Sie die Funktion „lexical_subs“;

· sleep(%u) zu groß

(W-Überlauf) Sie haben „sleep“ mit einer größeren Zahl aufgerufen, als es zuverlässig möglich ist
Griff und „Schlaf“ haben wahrscheinlich kürzer geschlafen als gewünscht.

· Breites Zeichen in setenv

Versuche, über %ENV breite Zeichen in Umgebungsvariablen einzufügen, führen nun dazu
Warnung.

· „Ungültige negative Zahl (%s) in chr“

„chr()“ warnt jetzt, wenn ein negativer Wert übergeben wird [perl #83048].

· „Integer-Überlauf in srand“

„srand()“ warnt jetzt, wenn ein Wert übergeben wird, der nicht in ein „UV“ passt (da der Wert
wird abgeschnitten und nicht überlaufen) [perl #40605].

· „-i verwendet ohne Dateinamen in der Befehlszeile, liest von STDIN“

Das Ausführen von Perl mit dem Flag „-i“ gibt jetzt eine Warnung aus, wenn keine Eingabedateien auf dem bereitgestellt werden
Befehlszeile [perl #113410].

Änderungen zu Vorhanden Diagnose
· $* wird nicht mehr unterstützt

Die Warnung, dass die Verwendung von $* und $# nicht mehr unterstützt wird, wird jetzt für alle generiert
Ort, der auf sie verweist. Zuvor konnte es nicht generiert werden, wenn ein anderes
Variable, die denselben Typeglob verwendet, wurde zuerst gesehen (z. B. „@*“ vor $*) und würde dies nicht tun
für die zweite und weitere Nutzungen generiert werden. (Es ist schwierig, den Fehler zu beheben
Generieren Sie überhaupt Warnungen, ohne sie jedes Mal zu generieren und jedes Mal zu warnen
Die Zeit stimmt mit den Warnungen überein, die $[ zur Generierung verwendet hat.)

· Die Warnungen für „\b{“ und „\B{“ wurden hinzugefügt. Es handelt sich um eine Verfallswarnung
sollte von dieser Kategorie deaktiviert werden. Man sollte den regulären regulären Ausdruck nicht deaktivieren müssen
Warnungen auch, um diese loszuwerden.

· Constant(%s): Der Aufruf von &{$^H{%s}} hat keinen definierten Wert zurückgegeben

Eine ständige Überladung, die „undef“ zurückgibt, führt zu dieser Fehlermeldung. Für numerisch
Konstanten hieß es früher „Constant(undef)“. „undef“ wurde durch ersetzt
Nummer selbst.

· Der Fehler, der entsteht, wenn ein Modul nicht geladen werden kann, enthält jetzt einen Hinweis, dass das Modul
muss möglicherweise installiert werden: „Hopping.pm kann in @INC nicht gefunden werden (Sie müssen möglicherweise installieren
das Hopping-Modul) (@INC enthält: ...)“

· Vektorargument wird bei Alpha-Versionen nicht unterstützt

Diese Warnung war auch bei „keine Warnungen“ nicht unterdrückbar. Jetzt ist es unterdrückbar,
und wurde von der Kategorie „intern“ in die Kategorie „printf“ verschoben.

· „Kann {n,m} nicht mit n > m in Regex machen; markiert durch <-- HERE in m/%s/“

Dieser schwerwiegende Fehler wurde in eine Warnung umgewandelt, die lautet:

Quantifizierer {n,m} mit n > m kann im regulären Ausdruck nicht übereinstimmen

(W regexp) Minima sollten kleiner oder gleich Maxima sein. Wenn du es wirklich willst
Damit ein regulärer Ausdruck 0 Mal mit etwas übereinstimmt, geben Sie einfach {0} ein.

· Die Warnung „Ausreißer-Prototyp“, die in seltsamen Fällen auftritt, wurde entfernt
wenig hilfreich und inkonsistent.

· Der Fehler „Keine Formatreferenz“ wurde als einziger Fehler entfernt, in dem er aufgetreten ist
ausgelöst werden konnte, war ein Fehler.

· Der Fehler „Sub namens %s konnte nicht erstellt werden“ wurde aus demselben Grund entfernt.

· Der Fehler „Mein %s kann nicht im Sortiervergleich verwendet werden“ wurde auf eine Warnung herabgestuft.
„„mein %s“ wird im Sortiervergleich verwendet“ (mit „state“ anstelle von „my“ für Statusvariablen).
Darüber hinaus wurde die Heuristik zum Erraten, ob das lexikalische $a oder $b falsch verwendet wurde
wurden verbessert, um weniger Fehlalarme zu generieren. Lexikalische $a und $b gibt es nicht mehr
nicht zulässig, wenn sie außerhalb des Sortierblocks liegen. Außerdem ein benannter Unär- oder Listenoperator
innerhalb des Sortierblocks führt nicht mehr dazu, dass $a oder $b ignoriert werden [perl #86136].

Dienstprogramm Änderungen


h2xs

· h2xs Erzeugt keinen ungültigen Code mehr für leere Definitionen. [perl #20636]

Konfiguration und Zusammenstellung


· Option „useversionedarchname“ zu „Konfigurieren“ hinzugefügt

Wenn es festgelegt ist, schließt es „api_versionstring“ in „archname“ ein. Z.B
x86_64-linux-5.13.6-thread-multi. Es ist standardmäßig deaktiviert.

Diese Funktion wurde von Tim Bunce angefordert, der beobachtete, dass „INSTALL_BASE“ ein erstellt
Bibliotheksstruktur, die nicht nach Perl-Version unterscheidet. Stattdessen platziert es
Architekturspezifische Dateien in „$install_base/lib/perl5/$archname“. Das macht es
Es ist schwierig, einen gemeinsamen „INSTALL_BASE“-Bibliothekspfad mit mehreren Perl-Versionen zu verwenden.

Durch die Einstellung „-Duseversionedarchname“ wird der $archname für die Architektur eindeutig
und API-Version, die eine gemischte Verwendung von „INSTALL_BASE“ ermöglicht.

· Fügen Sie eine Option „PERL_NO_INLINE_FUNCTIONS“ hinzu

Wenn „PERL_NO_INLINE_FUNCTIONS“ definiert ist, schließen Sie „inline.h“ nicht ein.

Dadurch kann Testcode die Perl-Header für Definitionen einschließen, ohne einen zu erstellen
Linkabhängigkeit von der Perl-Bibliothek (die möglicherweise noch nicht existiert).

· Bei der Konfiguration wird die externe Umgebungsvariable „MAILDOMAIN“ berücksichtigt, sofern diese festgelegt ist.

· „installman“ ignoriert die Silent-Option nicht mehr

· Sowohl die Dateien „META.yml“ als auch „META.json“ sind jetzt in der Distribution enthalten.

· Einrichtung erkennt „isblank()“ jetzt korrekt, wenn mit einem C++-Compiler kompiliert wird.

· Die Pager-Erkennung in Einrichtung wurde verbessert, um Antworten zu ermöglichen, die spezifizieren
Optionen nach dem Programmnamen, z /usr/bin/weniger -R, wenn der Benutzer die Standardeinstellung akzeptiert
Wert. Das hilft perldoc beim Umgang mit ANSI-Escapes [perl #72156].

Testen


· Die Testsuite verfügt jetzt über einen Abschnitt für Tests, die sehr viel Speicher benötigen.
Diese Tests werden nicht standardmäßig ausgeführt; Sie können durch Einstellen des aktiviert werden
Umgebungsvariable „PERL_TEST_MEMORY“ auf die Anzahl der Gibibytes Speicher, die zulässig sind
sicher verwendet werden.

Plattform Unterstützung


Auslauf Plattformen
BeOS
BeOS war ein Betriebssystem für Personalcomputer, das von Be Inc ursprünglich für entwickelt wurde
ihre BeBox-Hardware. Das Betriebssystem Haiku wurde als Open-Source-Ersatz geschrieben
für/Fortsetzung von BeOS, und sein Perl-Port ist aktuell und wird aktiv gepflegt.

UTS Global
Der Supportcode für UTS Global wurde entfernt. UTS war eine Mainframe-Version von
System V wurde von Amdahl entwickelt und anschließend an UTS Global verkauft. Der Hafen war nicht
berührt seit vor Perl v5.8.0, und UTS Global ist jetzt nicht mehr vorhanden.

VM/ESA
Die Unterstützung für VM/ESA wurde entfernt. Der Port wurde auf 2.3.0 getestet, was IBM beendete
Dienst im März 2002. 2.4.0 wurde im Juni 2003 eingestellt und durch ersetzt
Z/VM. Die aktuelle Version von Z/VM ist V6.2.0 und das Ende des Dienstes ist für geplant
2015 / 04 / 30.

MPE/IX
Die Unterstützung für MPE/IX wurde entfernt.

EPOC
Der Supportcode für EPOC wurde entfernt. EPOC war eine Betreiberfamilie
von Psion entwickelte Systeme für mobile Geräte. Es war der Vorgänger von Symbian.
Der Hafen wurde zuletzt im April 2002 aktualisiert.

Rhapsodie
Die Unterstützung für Rhapsody wurde entfernt.

Plattformspezifisch Notizen
AIX

Bei Verwendung von xlC fügt die Konfiguration jetzt immer „-qlanglvl=extc99“ zu den CC-Flags unter AIX hinzu. Das
wird es einfacher machen, eine Reihe von XS-basierten Modulen zu kompilieren, die C99 voraussetzen [perl
#113778].

klingeln ++

Es gibt jetzt eine Problemumgehung für einen Compiler-Fehler, der seitdem das Kompilieren mit clang++ verhindert hat
Perl v5.15.7 [perl #112786].

C + +

Beim Kompilieren des Perl-Kerns als C++ (das nur teilweise unterstützt wird) funktioniert das Mathom
werden jetzt als „extern „C““ kompiliert, um eine ordnungsgemäße Binärkompatibilität sicherzustellen. (Allerdings binär
In den Situationen, in denen dies der Fall wäre, ist die Kompatibilität im Allgemeinen ohnehin nicht gewährleistet
Gegenstand.)

Darwin

Hören Sie auf, eine Ausrichtung an 8-Byte-Grenzen fest zu codieren, um Builds mithilfe von -Dusemorebits zu reparieren.

Haiku

Perl sollte jetzt sofort auf Haiku R1 Alpha 4 funktionieren.

MitternachtBSD

„libc_r“ wurde aus neueren Versionen von MidnightBSD entfernt und ältere Versionen funktionieren besser
mit „pthread“. Threading ist jetzt mit „pthread“ aktiviert, wodurch Buildfehler korrigiert werden
Threading aktiviert auf 0.4-CURRENT.

Solaris

Vermeiden Sie in „Configure“ die Ausführung von sed-Befehlen mit Flags, die unter Solaris nicht unterstützt werden.

VMS

· Wo möglich, wird die Groß-/Kleinschreibung von Dateinamen und Befehlszeilenargumenten jetzt beibehalten
Aktivieren der CRTL-Funktionen „DECC$EFS_CASE_PRESERVE“ und „DECC$ARGV_PARSE_STYLE“ bei
Startzeit. Letzteres wird nur wirksam, wenn die erweiterte Analyse im aktiviert ist
Prozess, von dem aus Perl ausgeführt wird.

· Der Zeichensatz für die erweiterte Dateinamensyntax (EFS) ist jetzt standardmäßig auf VMS aktiviert.
Dies sorgt unter anderem für eine bessere Handhabung von Punkten in Verzeichnisnamen, mehrfach
Punkte in Dateinamen und Leerzeichen in Dateinamen. Um das alte Verhalten zu erhalten, legen Sie fest
logischen Namen „DECC$EFS_CHARSET“ auf „DISABLE“.

· Die Verknüpfung bei Builds, die mit „-Dusemymalloc=y“ konfiguriert wurden, wurde korrigiert.

· Experimentelle Unterstützung für die Erstellung von Perl mit dem HP C++-Compiler ist verfügbar bei
Konfigurieren mit „-Dusecxx“.

· Alle C-Header-Dateien aus dem obersten Verzeichnis der Distribution sind jetzt installiert
auf VMS und bietet Konsistenz mit einer langjährigen Praxis auf anderen Plattformen.
Zuvor wurde nur eine Teilmenge installiert, die Nicht-Kern-Erweiterungs-Builds für brach
Erweiterungen, die von den fehlenden Include-Dateien abhängig waren.

· Anführungszeichen werden jetzt aus dem Befehlsverb (jedoch nicht aus den Parametern) für Befehle entfernt
erzeugt über „System“, Backticks oder ein weitergeleitetes „Öffnen“. Zuvor Zitate zum Verb
wurden an DCL weitergeleitet, das den Befehl nicht erkennen würde. Auch wenn die
Verb ist eigentlich ein Pfad zu einem Bild oder einer Befehlsprozedur auf einem ODS-5-Volume
Der Pfad darf nun Leerzeichen enthalten.

· Das a2p Der Build wurde für den HP C++-Compiler unter OpenVMS behoben.

Win32

· Perl kann jetzt mit dem Visual C++ 2012-Compiler von Microsoft erstellt werden, indem Folgendes angegeben wird
CCTYPE=MSVC110 (oder MSVC110FREE, wenn Sie die kostenlose Express-Edition für Windows verwenden
Desktop) in win32/Makefile.

· Die Option zum Erstellen ohne „USE_SOCKETS_AS_HANDLES“ wurde entfernt.

· Es wurde ein Problem behoben, bei dem Perl beim Bereinigen von Threads (einschließlich des Hauptthreads) abstürzen konnte
Thread) in Thread-Debugging-Builds auf Win32 und möglicherweise anderen Plattformen [perl
#114496].

· Ein seltener Rennzustand, der dazu führen würde, dass der Schlaf länger dauert als gewünscht, und
möglicherweise sogar hängen, wurde behoben [perl #33096].

· „link“ unter Win32 versucht jetzt, $! zu setzen. zu passenderen Werten basierend auf Win32
API-Fehlercode. [perl #112272]

Perl manipuliert den Umgebungsblock nicht mehr, z. B. beim Starten eines neuen Unterprozesses.
wenn die Umgebung Nicht-ASCII-Zeichen enthält. Es bestehen weiterhin bekannte Probleme,
jedoch, wenn die Umgebung Zeichen außerhalb der aktuellen ANSI-Codepage enthält
(siehe z. B. den Artikel über Unicode in %ENV in
<http://perl5.git.perl.org/perl.git/blob/HEAD:/Porting/todo.pod>). [perl #113536]

· Das Erstellen von Perl mit einigen Windows-Compilern schlug aufgrund eines Problems mit . fehl
Der "glob"-Operator von miniperl (der das "perlglob" -Programm verwendet) löscht den PATH
Umgebungsvariable [perl #113798].

· Den Windows-Makefiles wurde eine neue Makefile-Option „USE_64_BIT_INT“ hinzugefügt. Satz
Dies wird beim Erstellen eines 32-Bit-Perls „definiert“, wenn es 64-Bit-Ganzzahlen verwenden soll.

Reduzierungen der Maschinencodegröße, die bereits an den DLLs von XS-Modulen in Perl v5.17.2 vorgenommen wurden,
wurden nun auf die Perl-DLL selbst erweitert.

Das Erstellen mit VC++ 6.0 wurde in Perl v5.17.2 versehentlich unterbrochen, wurde aber jetzt behoben
erneut.

WinCE

Das Aufbauen auf WinCE ist nun wieder möglich, allerdings ist zur Vollständigkeit noch mehr Arbeit erforderlich
einen sauberen Build wiederherstellen.

Intern Änderungen


· Es wurden Synonyme für den irreführenden Namen „av_len()“ erstellt: „av_top_index()“ und
„av_tindex“. Alle drei geben die Nummer des höchsten Index im Array zurück.
nicht die Anzahl der darin enthaltenen Elemente.

· SvUPGRADE() ist kein Ausdruck mehr. Ursprünglich war dieses Makro (und sein zugrundeliegendes
Funktion, sv_upgrade()) wurden als boolesche Werte dokumentiert, obwohl dies in Wirklichkeit immer der Fall ist
krächzte bei einem Fehler und gab nie false zurück. Im Jahr 2005 wurde die Dokumentation aktualisiert
Geben Sie einen void-Rückgabewert an, aber SvUPGRADE() blieb übrig und gab immer 1 für rückwärts zurück
Kompatibilität. Dies wurde nun entfernt, und SvUPGRADE() ist jetzt eine Aussage mit nein
Rückgabewert.

Das ist also jetzt ein Syntaxfehler:

if (!SvUPGRADE(sv)) { croak(...); }

Wenn Sie solchen Code haben, ersetzen Sie ihn einfach durch

SvUPGRADE(sv);

oder um möglicherweise Compiler-Warnungen bei älteren Perls zu vermeiden

(void)SvUPGRADE(sv);

· Perl verfügt über einen neuen Copy-on-Write-Mechanismus, mit dem jeder SvPOK-Skalar aktualisiert werden kann
ein Copy-on-Write-Skalar. Ein Referenzzähler für den Zeichenfolgenpuffer wird im gespeichert
String-Puffer selbst. Diese Funktion ist nicht freigegeben by Standard.

Es kann in einem Perl-Build durch Ausführen aktiviert werden Einrichtung mit
-Accflags=-DPERL_NEW_COPY_ON_WRITE, und wir würden XS-Autoren ermutigen, es auszuprobieren
Code mit einem solchen aktivierten Perl erstellen und Feedback geben. Gibt es leider noch nicht
Eine gute Anleitung zum Aktualisieren von XS-Code, um mit COW zurechtzukommen. Bis ein solches Dokument vorliegt
verfügbar, konsultieren Sie die Mailingliste perl5-porters.

Es beschädigt einige XS-Module, indem es Skalaren beim Kopieren beim Schreiben erlaubt, Codepfade zu durchlaufen
das ist ihnen noch nie zuvor begegnet.

· Copy-on-Write verwendet nicht mehr die Flags SvFAKE und SvREADONLY. Daher SvREADONLY
gibt einen echten schreibgeschützten SV an.

Verwenden Sie das SvIsCOW-Makro (wie zuvor), um einen Copy-on-Write-Skalar zu identifizieren.

· „PL_glob_index“ ist weg.

· Der Kontextparameter des privaten Perl_croak_no_modify wurde entfernt. Es ist jetzt vorhanden
ein leerer Prototyp. Nutzer der öffentlichen API croak_no_modify bleiben davon unberührt.

· Skalare, die beim Schreiben kopiert werden (gemeinsamer Hash-Schlüssel), sind nicht mehr als schreibgeschützt gekennzeichnet. „SvREADONLY“
gibt auf einem solchen SV „false“ zurück, aber „SvIsCOW“ gibt immer noch „true“ zurück.

· Ein neuer Operationstyp, „OP_PADRANGE“, wurde eingeführt. Der Perl-Gucklochoptimierer wird,
Wenn möglich, ersetzen Sie einen Pushmark durch einen einzelnen Padrange-Op, gefolgt von einem oder mehreren
Pad-Ops und möglicherweise auch Skipping-List- und Nextstate-Ops. Darüber hinaus kann die OP
Führen Sie die Aufgaben aus, die mit dem RHS einer „my(...) = @_“-Aufgabe verbunden sind, also jene
Ops können auch wegoptimiert werden.

· Vergleich ohne Beachtung der Groß-/Kleinschreibung innerhalb einer [in Klammern gesetzten] Zeichenklasse mit einem Mehrzeichen
Fold schließt unter den gegebenen Umständen nicht mehr eine der Möglichkeiten aus.
[Perl #89774].

· „PL_formfeed“ wurde entfernt.

· Die Engine für reguläre Ausdrücke liest nicht mehr ein Byte über das Ende des Ziels hinaus
Zeichenfolge. Während dies für alle intern wohlgeformten Skalare niemals hätte der Fall sein dürfen
Problem, diese Änderung ermöglicht clevere Tricks mit String-Puffer in CPAN-Modulen.
[perl #73542]

· Innerhalb eines BEGIN-Blocks zeigt „PL_compcv“ jetzt auf die aktuell kompilierende Unterroutine.
und nicht der BEGIN-Block selbst.

· „mg_length“ ist veraltet.

· „sv_len“ gibt jetzt immer eine Byteanzahl und „sv_len_utf8“ eine Zeichenanzahl zurück.
Zuvor waren sowohl „sv_len“ als auch „sv_len_utf8“ fehlerhaft und wurden manchmal zurückgegeben
Bytes und manchmal Zeichen. „sv_len_utf8“ geht nicht mehr davon aus, dass sein Argument vorhanden ist
in UTF-8. Keines davon erstellt UTF-8-Caches für gebundene oder überladene Werte oder für
Nicht-PVs mehr.

· „sv_mortalcopy“ kopiert jetzt String-Puffer gemeinsam genutzter Hash-Schlüsselskalare, wenn es aufgerufen wird
XS-Module [perl #79824].

· Das neue Flag „RXf_MODIFIES_VARS“ kann von benutzerdefinierten Engines für reguläre Ausdrücke auf gesetzt werden
Geben Sie an, dass die Ausführung des regulären Ausdrucks dazu führen kann, dass Variablen vorhanden sind
geändert. Dadurch wird „s///“ darüber informiert, bestimmte Optimierungen zu überspringen. Perls eigener Stammgast
Die Ausdrucks-Engine setzt dieses Flag für die speziellen Backtracking-Verben, die $REGMARK festlegen
und $REGERROR.

· Die APIs für den Zugriff auf Lexikonpads haben sich erheblich geändert.

„PADLIST“s sind jetzt längere „AVs“, haben aber stattdessen einen eigenen Typ. „PADLIST“s enthalten jetzt a
„PAD“ und eine „PADNAMELIST“ von „PADNAME“s, anstelle von „AV“s für das Pad und die Liste von
Pad-Namen. Der Zugriff auf „PAD“, „PADNAMELIST“ und „PADNAME“ erfolgt als solche über
die neu hinzugefügte Pad-API anstelle der einfachen APIs „AV“ und „SV“. Siehe Perlapi für
Details.

· In der Regex-API wird den nummerierten Capture-Callbacks ein Index übergeben, der angibt, was
Auf die Match-Variable wird zugegriffen. Es gibt spezielle Indexwerte für „$`, $&, $&“
Variablen. Zuvor wurden dieselben drei Werte verwendet, um „${^PREMATCH}“ abzurufen,
${^MATCH}, ${^POSTMATCH}" auch, diesen wurden aber nun drei separate Werte zugewiesen.
Siehe „Nummerierte Capture-Rückrufe“ in Perlreapi.

· „PL_sawampersand“ war zuvor ein boolescher Wert, der angab, dass „$`, $&, $&“ vorhanden war
gesehen worden; Es enthält jetzt drei Ein-Bit-Flags, die das Vorhandensein jedes einzelnen anzeigen
Variablen einzeln.

· Der Typemap-Eintrag „CV *“ unterstützt jetzt „&{}“-Überladung und Typeglobs, genau wie
„&{...}“ [perl #96872].

· Das „SVf_AMAGIC“-Flag zeigt an, dass die Überladung jetzt auf dem Stash und nicht auf dem Objekt erfolgt. Es
wird jetzt automatisch gesetzt, wenn sich eine Methode oder @ISA ändert, also hat es auch seine Bedeutung
auch geändert. Es bedeutet jetzt „potenziell überlastet“. Wenn die Überlasttabelle ist
Berechnet wird, dass das Flag automatisch ausgeschaltet wird, wenn keine Überlastung vorliegt
Es sollte keine merkliche Verlangsamung auftreten.

Die Veralterung der Überladungstabellen wird jetzt überprüft, wenn Überladungsmethoden aufgerufen werden.
anstatt während „segnen“.

„A“-Magie ist verschwunden. Die Änderungen an der Behandlung des Flags „SVf_AMAGIC“ beseitigen das
brauche dafür.

„PL_amagic_generation“ wurde entfernt, da nicht mehr erforderlich. Für XS-Module ist dies der Fall
jetzt ein Makro-Alias ​​für „PL_na“.

Die Fallback-Überladungseinstellung wird jetzt in einem separaten Stash-Eintrag gespeichert
Überlastung selbst.

· Der Zeichenverarbeitungscode wurde stellenweise aufgeräumt. Die Änderungen sollten sein
betrieblich unsichtbar.

· Die Funktion „Lernen“ wurde in Version 5.16 zu einem No-Op gemacht. Es wurde einfach per „Return“ deaktiviert
Stellungnahme; Der Code wurde beibehalten. Jetzt der Code, der das unterstützt, was früher „Lernen“ war
do wurde entfernt.

· Unter Threaded Perls gibt es nicht mehr für jeden COP eine separate PV, die zugewiesen wird
speichert seinen Paketnamen („cop->stashpv“). Stattdessen gibt es einen Offset
(„cop->stashoff“) in das neue „PL_stashpad“-Array, das Stash-Zeiger enthält.

· In der steckbaren Regex-API hat die Struktur „regexp_engine“ ein neues Feld erhalten
„op_comp“, das derzeit nur für den internen Gebrauch von Perl bestimmt ist und initialisiert werden sollte
von anderen Regex-Plugin-Modulen auf NULL gesetzt.

· Eine neue Funktion „alloccopstash“ wurde zur API hinzugefügt, wird aber in Betracht gezogen
Experimental. Siehe Perlapi.

· Früher implementierte Perl Get Magic auf eine Weise, die manchmal Fehler im Code verbarg
Könnte anrufen mg_get() zu oft auf magische Werte. Dieses Verstecken von Fehlern gibt es nicht mehr
auftritt, so dass bereits seit langem bestehende Fehler jetzt sichtbar werden können. Wenn Sie magische Fehler sehen
Überprüfen Sie im XS-Code, ob er zusammen mit den von ihm verwendeten Perl-API-Funktionen aufgerufen wird
mg_get() nur einmal an SvGMAGICAL() Werte.

· Die OP-Zuweisung für CVs verwendet jetzt einen Slab-Zuteiler. Dies vereinfacht die Speicherverwaltung
für OPs, die einem CV zugeordnet sind, sodass die Bereinigung nach einem Kompilierungsfehler einfacher und einfacher ist
sicherer [perl #111462][perl #112312].

· „PERL_DEBUG_READONLY_OPS“ wurde umgeschrieben, um mit dem neuen Slab-Allokator zu funktionieren.
Dadurch können mehr Verstöße als zuvor erkannt werden.

· Der alte Slab-Allokator für ops, der nur für „PERL_IMPLICIT_SYS“ und aktiviert war
„PERL_DEBUG_READONLY_OPS“ wurde zurückgezogen.

Selected Fehler Fehlerkorrekturen


· Hier benötigen Dokumentabschlusszeichen kein abschließendes Zeilenumbruchzeichen mehr
am Ende einer Datei auftreten. Dies war bereits am Ende einer String-Auswertung der Fall
[Perl #65838].

· „-DPERL_GLOBAL_STRUCT“ erstellt jetzt die globale Struktur nachdem Sie haben die Verwendung beendet
es.

· An einen nachgestellten „/“ in einem Pfad in @INC wird kein zusätzlicher „/“ mehr angehängt.

· Die Ebene „:crlf“ funktioniert jetzt, wenn ungelesene Daten nicht in ihren eigenen Puffer passen. [Perl
#112244].

· „ungetc()“ verarbeitet jetzt UTF-8-codierte Daten. [perl #116322].

· Ein Fehler in der Kern-Typemap führte dazu, dass alle C-Typen dem T_BOOL-Kern-Typemap-Eintrag zugeordnet wurden
darf nicht gesetzt, aktualisiert oder geändert werden, wenn die T_BOOL-Variable in einem OUTPUT verwendet wurde:
Abschnitt mit einer Ausnahme für RETVAL. T_BOOL in einem INPUT:-Abschnitt war nicht betroffen.
Die Verwendung eines T_BOOL-Rückgabetyps für ein XSUB (RETVAL) war nicht betroffen. Eine Nebenwirkung von
Die Behebung dieses Fehlers erfolgt, wenn im Abschnitt OUTPUT: ein T_BOOL angegeben wird (was zuvor der Fall war).
hat nichts mit dem SV gemacht) und ein schreibgeschütztes SV (Literal) wird an den XSUB übergeben, krächzt
wie „Änderung eines schreibgeschützten Werts versucht“ wird passieren. [perl #115796]

· Auf vielen Plattformen führte die Angabe eines Verzeichnisnamens als Skriptname dazu, dass Perl dies tat
nichts und melde Erfolg. Es sollte nun allgemein einen Fehler melden und beendet werden
ungleich Null. [perl #61362]

· „sort {undef} ...“ stürzt bei schwerwiegenden Warnungen nicht mehr ab. Es begann hineinzukrachen
Perl v5.16.

· Ineinander gesegnete Stashes ("bless \%Foo::, 'Bar'; bless \%Bar::, 'Foo'") Nr
Länger führen zu doppelten Frees. Dieser Fehler trat in Perl v5.16 auf.

· Zahlreiche Speicherlecks wurden behoben, hauptsächlich im Zusammenhang mit schwerwiegenden Warnungen und Syntax
Fehler.

· Einige fehlgeschlagene reguläre Ausdrucksübereinstimmungen wie „'f' =~ /../g“ wurden nicht zurückgesetzt
„pos“. Auch „Match-Once“-Muster („m?...?g“) konnten es beim Aufruf nicht zurücksetzen
ein zweites Mal [perl #23180].

· Mehrere Fehler im Zusammenhang mit „local *ISA“ und „local *Foo::“, die veraltete MRO-Caches verursachen
behoben worden.

· Das Definieren einer Unterroutine, wenn ihr Typeglob mit einem Alias ​​versehen wurde, führt nicht mehr zu veraltet
Methoden-Caches. Dieser Fehler wurde in Perl v5.10 eingeführt.

· Lokalisieren eines Typeglobs, das eine Unterroutine enthält, wenn das Paket des Typeglobs vorhanden ist
Das Löschen aus dem übergeordneten Stash führt nicht mehr zu einem Fehler. Dieser Fehler wurde eingeführt
Perl v5.14.

· Unter bestimmten Umständen würde „local *method=...“ beim Zurücksetzen der Methoden-Caches fehlschlagen
Bereichsausgang.

· „/[.foo.]/“ ist kein Fehler mehr, sondern erzeugt (wie zuvor) eine Warnung und wird behandelt
als „/[.fo]/“ [perl #115818].

· „goto $tied_var“ ruft jetzt FETCH auf, bevor entschieden wird, welche Art von goto (Unterprogramm oder
Etikett) das ist.

· Umbenennen von Paketen durch Glob-Zuweisung („*Foo:: = *Bar::; *Bar:: = *Baz::“) in
Kombination mit „m?...?“ und „Zurücksetzen“ führt nicht mehr zum Absturz von Thread-Builds.

· Eine Reihe von Fehlern im Zusammenhang mit der Zuweisung einer Liste zum Hash wurden behoben. Viele davon
beinhalten Listen mit wiederholten Schlüsseln wie „(1, 1, 1, 1)“.

· Der Ausdruck „scalar(%h = (1, 1, 1, 1))“ gibt jetzt 4 und nicht 2 zurück.

· Der Rückgabewert von „%h = (1, 1, 1)“ im Listenkontext war falsch. Zuvor dies
würde „(1, undef, 1)“ zurückgeben, jetzt gibt es „(1, undef)“ zurück.

· Perl gibt jetzt für „($s, %h) = (1, {})“ dieselbe Warnung aus wie für „(%h) =
({})“, „Referenz gefunden, wo eine Liste mit gerader Größe erwartet wird“.

· Eine Reihe zusätzlicher Randfälle bei der Listenzuordnung zu Hashes wurden korrigiert. Für
Weitere Details finden Sie unter Commit 23b7025ebc.

· Attribute, die auf lexikalische Variablen angewendet werden, verlieren keinen Speicher mehr. [perl #114764]

· „dump“, „goto“, „last“, „next“, „redo“ oder „require“, gefolgt von einem bloßen Wort (oder
Version) und dann ist ein Infix-Operator kein Syntaxfehler mehr. Früher war es für
jene Infix-Operatoren (wie „+“), die dort, wo ein Begriff steht, eine andere Bedeutung haben
erwartet. [perl #105924]

· „require a::b . 1“ und „require a::b + 1“ erzeugen keine fehlerhafte Mehrdeutigkeit mehr
Warnungen. [perl #107002]

· Klassenmethodenaufrufe sind jetzt für jede Zeichenfolge zulässig, nicht nur für Zeichenfolgen, die mit beginnen
ein alphanumerisches Zeichen. [perl #105922]

· Ein leeres Muster, das mit „qr//“ erstellt wurde und in „m///“ verwendet wurde, löst nicht mehr das „empty“ aus
„Muster verwendet das letzte Muster wieder“-Verhalten. [perl #96230]

· Das Binden eines Hashs während der Iteration führt nicht mehr zu einem Speicherverlust.

· Das Freigeben eines gebundenen Hashs während der Iteration führt nicht mehr zu einem Speicherverlust.

· Listenzuweisung zu einem gebundenen Array oder Hash, der beim STORE stirbt, führt nicht mehr zu einem
Speicherleck.

· Wenn der Hinweis-Hash („%^H“) gebunden ist, erfolgt der Bereichseintrag zur Kompilierungszeit (der den Hinweis kopiert).
Hash) verliert keinen Speicher mehr, wenn FETCH stirbt. [perl #107000]

· Ständiges Falten löst nicht mehr unangemessen das spezielle „Split“-Verhalten aus.
[perl #94490]

· „definierter Skalar(@array)“, „definierter do { &foo }“ und ähnliche Konstrukte behandeln jetzt das
Argument, das als einfacher Skalar „definiert“ werden soll. [perl #97466]

· Ausführen eines benutzerdefinierten Debuggings, das keinen *DB::DB-Glob definiert oder einen Subroutinen-Stub bereitstellt
für &DB::DB führt nicht mehr zu einem Absturz, sondern zu einem Fehler. [perl #114990]

· „reset „“ stimmt jetzt mit seiner Dokumentation überein. „reset“ setzt nur „m?...?“ zurück Muster wann
ohne Argument aufgerufen. Eine leere Zeichenfolge für ein Argument hat jetzt keine Auswirkung. (Es wurde verwendet
als kein Argument behandelt werden.) [perl #97958]

· „printf“ mit einem Argument, das eine leere Liste zurückgibt, liest nicht mehr über das Ende hinaus
Stapel, was zu unberechenbarem Verhalten führt. [perl #77094]

· „--subname“ erzeugt keine fehlerhaften Mehrdeutigkeitswarnungen mehr. [perl #77240]

· „v10“ ist jetzt als Label oder Paketname zulässig. Dies wurde versehentlich gebrochen, als
V-Strings wurden in Perl v5.6 hinzugefügt. [perl #56880]

· „length“, „pos“, „substr“ und „sprintf“ könnten durch Bindungen, Überladung usw. verwechselt werden.
Referenzen und Typeglobs, wenn die Stringifizierung dieser das Interne geändert hat
Darstellung zu oder von UTF-8. [perl #114410]

· utf8::encode ruft jetzt FETCH und STORE für gebundene Variablen auf. utf8::decode ruft jetzt auf
STORE (es wurde bereits FETCH aufgerufen).

· „$tied =~ s/$non_utf8/$utf8/“ führt keine Endlosschleife mehr durch, wenn die gebundene Variable zurückkehrt
eine Latin-1-Zeichenfolge, ein Skalar mit gemeinsam genutztem Hash-Schlüssel oder eine Referenz oder ein Typeglob, das als Zeichenfolge erstellt wird
ASCII oder Latin-1. Dies war eine Regression gegenüber Version 5.12.

· „s///“ ohne /e erkennt jetzt besser, wann auf bestimmte Dinge verzichtet werden muss
Optimierungen, Behebung einiger fehlerhafter Fälle:

· Vergleichen Sie Variablen in bestimmten Konstrukten („&&“, „||“, „..“ und andere) im
Ersatzteil; zB „s/(.)/$l{$a||$1}/g“. [perl #26986]

· Aliase zum Abgleichen von Variablen im Ersatz.

· $REGERROR oder $REGMARK im Ersatz. [perl #49190]

· Ein leeres Muster („s//$foo/“), das bewirkt, dass das zuletzt erfolgreiche Muster verwendet wird,
wenn dieses Muster Codeblöcke enthält, die die Variablen in ändern
Ersatz.

· Die Verfälschung der Ersatzzeichenfolge hat keinen Einfluss mehr auf die Verfälschung der
Rückgabewert von „s///e“.

· Das $| Die Autoflush-Variable wird bei Bedarf spontan erstellt. Wenn dies passiert ist (z. B.
wenn es in einem Modul oder einer Evaluierung erwähnt wurde), wenn das aktuell ausgewählte Dateihandle ein war
typeglob mit einem leeren IO-Steckplatz, stürzte es immer ab. [perl #115206]

· Zeilennummern am Ende einer String-Auswertung sind nicht mehr um eins versetzt. [perl #114658]

· @INC-Filter (Unterroutinen, die von Unterroutinen in @INC zurückgegeben werden), die $_ auf ein Copy-on- setzen.
Das Schreiben von Skalaren führt nicht mehr dazu, dass der Parser diesen Zeichenfolgenpuffer an Ort und Stelle ändert.

· „length($object)“ gibt nicht mehr den undefinierten Wert zurück, wenn das Objekt eine Zeichenfolge hat
Überladung, die undef zurückgibt. [perl #115260]

· Die Verwendung von „PL_stashcache“, dem Stash-Name-Lookup-Cache für Methodenaufrufe, wurde durchgeführt
restauriert,

Der Commit da6b625f78f5f133 im August 2011 hat versehentlich den nachgeschlagenen Code beschädigt
Werte in „PL_stashcache“. Da es sich um einen einzigen Cache handelt, läuft alles richtigerweise weiter
ohne arbeiten.

· Der Fehler „Kann nicht über eine Referenz lokalisiert werden“ war in Version 5.16.0 verschwunden, als „local
„%$ref“ erschien in der letzten Zeile einer L-Wert-Subroutine. Dieser Fehler verschwand für
„\local %$ref“ in Perl v5.8.1. Mittlerweile wurde es restauriert.

· Das Parsen von Here-Dokumenten wurde erheblich verbessert und mehrere Parsing-Fehler behoben
und Abstürze und ein Speicherleck sowie die Korrektur falscher nachfolgender Zeilennummern unten
bestimmte Bedingungen.

· Innerhalb einer Auswertung enthält die Fehlermeldung für ein nicht abgeschlossenes Here-Dokument keinen Zeilenumbruch mehr
mittendrin [perl #70836].

· Eine Ersetzung innerhalb eines Ersetzungsmusters („s/${s|||}//“) verwirrt das nicht mehr
Parser.

· Es mag ein seltsamer Ort sein, Kommentare zuzulassen, aber „s//““ # hello/e“ hat immer funktioniert.
es sei denn Vor dem ersten # steht zufällig ein Nullzeichen. Jetzt funktioniert es sogar in
das Vorhandensein von Nullen.

· Ein ungültiger Bereich in „tr///“ oder „y///“ führt nicht mehr zu einem Speicherverlust.

· String eval behandelt keinen durch Semikolons getrennten, anführungszeichenähnlichen Operator ganz am Ende mehr
("eval 'q;;'") als Syntaxfehler.

· „warn {$_ => 1} + 1“ ist kein Syntaxfehler mehr. Der Parser war früher verwirrt
mit bestimmten Listenoperatoren, gefolgt von einem anonymen Hash und dann einem Infix-Operator
das seine Form mit einem unären Operator teilt.

· „(caller $n)[6]“ (gibt den Text der Auswertung an), der zur Rückgabe des eigentlichen Parsers verwendet wird
Puffer. Eine Änderung könnte zu Abstürzen führen. Jetzt wird immer eine Kopie zurückgegeben. Der
Die zurückgegebene Zeichenfolge enthält nicht mehr „\n;“ bis zum Ende angeheftet. Der zurückgegebene Text ebenfalls
Enthält Here-Doc-Körper, die früher weggelassen wurden.

· Der UTF-8-Positionscache wird jetzt beim Zugriff auf magische Variablen zurückgesetzt, um das zu vermeiden
String-Puffer und UTF-8-Positionscache geraten nicht mehr synchron [perl #114410].

· Es gab verschiedene Fälle, in denen get magic für magische UTF-8-Strings zweimal aufgerufen wurde
befestigt ist.

· Dieser Code (wenn nicht $& usw. vorhanden ist)

$_ = 'x' x 1_000_000;
1 während /(.)/;

Früher wurde die Pufferkopie aus Leistungsgründen übersprungen, litt aber unter $1 usw
ändern, wenn sich die ursprüngliche Zeichenfolge geändert hat. Das ist mittlerweile behoben.

· Perl verwendet PerlIO nicht mehr, um Meldungen über nicht genügend Arbeitsspeicher zu melden, wie dies bei PerlIO der Fall sein könnte
Versuchen Sie, mehr Speicher zuzuweisen.

· Wenn in einem regulären Ausdruck etwas mit „{n,m}“ quantifiziert wird, wobei „n > m“, ist es
kann unmöglich zusammenpassen. Früher war dies ein schwerwiegender Fehler, jetzt handelt es sich lediglich um eine Warnung
(und dass etwas nicht passt). [perl #82954].

· Früher waren Formate möglich, die in späteren Unterprogrammen definiert wurden
undefiniert und neu definiert, um Variablen im falschen Pad (dem neu definierten) zu schließen
beiliegendes Sub), was zu Abstürzen oder „Bizarre copy“-Fehlern führt.

· Die Neudefinition von XSUBs zur Laufzeit könnte zu Warnungen mit der falschen Zeilennummer führen.

· Das %vd Sprintf-Format unterstützt keine Versionsobjekte für Alpha-Versionen. Es wurde verwendet
um das Format selbst (%vd) auszugeben, wenn eine Alpha-Version übergeben wird, und auch eine auszugeben
Warnung „Ungültige Konvertierung in printf“. Es tut es nicht mehr, sondern produziert das Leere
Zeichenfolge in der Ausgabe. In diesem Fall kommt es auch nicht mehr zu Speicherverlusten.

· „$obj->SUPER::method“-Aufrufe im Hauptpaket könnten fehlschlagen, wenn das SUPER-Paket dies getan hätte
auf andere Weise bereits zugegriffen wurde.

· Stash-Aliasing („*foo:: = *bar::“) führt nicht mehr dazu, dass SUPER-Aufrufe Änderungen an ignorieren
Methoden oder @ISA oder verwenden Sie das falsche Paket.

· Methodenaufrufe für Pakete, deren Namen auf ::SUPER enden, werden nicht mehr als SUPER behandelt
Methodenaufrufe, was dazu führt, dass die Methode nicht gefunden werden kann. Darüber hinaus definieren
Unterroutinen in solchen Paketen führen nicht mehr dazu, dass sie von SUPER-Methodenaufrufen gefunden werden
auf dem enthaltenden Paket [perl #114924].

· „\w“ entspricht jetzt den Codepunkten U+200C (ZERO WIDTH NON-JOINER) und U+200D (ZERO WIDTH
SCHREINER). „\W“ stimmt nicht mehr mit diesen überein. Diese Änderung ist darauf zurückzuführen, dass Unicode korrigiert wurde
ihre Definition dessen, was „\w“ entsprechen soll.

· „dump LABEL“ verliert sein Etikett nicht mehr.

· Ständiges Falten ändert nicht mehr das Verhalten von Funktionen wie „stat()“ und
„truncate()“, das entweder Dateinamen oder Handles annehmen kann. „stat 1 ? foo : bar“ jetzt
behandelt sein Argument als Dateinamen (da es sich um einen beliebigen Ausdruck handelt) und nicht
das Handle „foo“.

· „Truncate FOO, $len“ greift nicht mehr darauf zurück, „FOO“ als Dateinamen zu behandeln, wenn das
Dateihandle wurde gelöscht. Dies war in Perl v5.16.0 fehlerhaft.

· Unterprogramm-Neudefinitionen nach Sub-zu-Glob- und Glob-zu-Glob-Zuweisungen nicht mehr
kann zu doppelten Freigaben oder Panikmeldungen führen.

· „s///“ wandelt Vstrings jetzt in einfache Strings um, wenn eine Ersetzung durchgeführt wird, auch wenn
Die resultierende Zeichenfolge ist dieselbe („s/a/a/“).

· Warnungen vor nicht übereinstimmenden Prototypen behandeln konstante Subs nicht mehr fälschlicherweise so, als hätten sie keine
Prototyp, wenn sie tatsächlich „“ haben.

· Konstante Unterprogramme und Vorwärtsdeklarationen verhindern nicht mehr die Nichtübereinstimmung von Prototypen
Warnungen vor dem Weglassen des Unternamens.

· „undef“ in einer Unterroutine löscht jetzt Anrufprüfer.

· Der „ref“-Operator begann in Perl v5.16.0, Speicher für gesegnete Objekte zu verlieren. Das
wurde behoben [perl #114340].

· „use“ versucht nicht mehr, seine Argumente als Anweisung zu analysieren, wodurch „use konstant { ()“ wird.
};" ein Syntaxfehler [perl #114222].

· Beim Debuggen von Builds verursachen „nicht initialisierte“ Warnungen innerhalb von Formaten keine Assertion mehr
Misserfolge

· Beim Debuggen von Builds verursachen in Formaten verschachtelte Unterroutinen keine Assertion mehr
Fehler [perl #78550].

· Formate und „use“-Anweisungen sind jetzt innerhalb von Formaten zulässig.

· „print $x“ und „sub { print $x }->()“ erzeugen jetzt immer die gleiche Ausgabe. Es war
Es ist möglich, dass Letzterer sich weigert, über $x zu schließen, wenn die Variable nicht aktiv ist.
z. B. wenn es außerhalb einer aktuell ausgeführten benannten Unterroutine definiert wurde.

· Ebenso erzeugen „print $x“ und „print eval '$x'“ jetzt die gleiche Ausgabe. Das auch
Ermöglicht die Anzeige von „my $x if 0“-Variablen im Debugger [perl #114018].

· Formate, die rekursiv aufgerufen werden, stampfen nicht mehr auf ihre eigenen lexikalischen Variablen, sondern auf jede einzelne
Der rekursive Aufruf verfügt über einen eigenen Satz an Lexika.

· Der Versuch, ein aktives Format oder das damit verbundene Handle freizugeben, schlägt fehl
bei einem Absturz.

· Das Parsen von Formaten wird nicht mehr durch geschweifte Klammern, Semikolons und niedrige Priorität verwirrt
Betreiber. Früher war es möglich, geschweifte Klammern als Formattrennzeichen zu verwenden (anstelle von „="
und „.“), aber nur manchmal. Semikolons und Operatoren mit niedriger Priorität im Format
Argumentzeilen verleiten den Parser nicht mehr dazu, den Rückgabewert der Zeile zu ignorieren. In
Argumentzeilen formatieren, geschweifte Klammern können jetzt für anonyme Hashes verwendet werden, anstatt sie zu verwenden
werden immer als „do“-Blöcke behandelt.

· Formate können jetzt in Codeblöcken in regulären Ausdrücken und anderen Anführungszeichen verschachtelt werden
Konstrukte ("/(?{...})/" und "qq/${...}/") [perl #114040].

· Formate werden nach Kompilierungsfehlern nicht mehr erstellt.

· Unter Debugging-Builds die -DA Die Befehlszeilenoption stürzte in Perl v5.16.0 ab.
Es wurde behoben [perl #114368].

· Ein potenzielles Deadlock-Szenario mit vorzeitiger Beendigung einer Pseudo-Forkung
Kind in einem Windows-Build mit aktivierten ithreads wurde behoben. Dies löst das Problem
häufiges Problem der t/op/fork.t Test hängt unter Windows [perl #88840].

· Der Code, der Fehler von „require()“ generiert, könnte möglicherweise einen oder zwei lesen
Bytes vor dem Anfang des Dateinamens für Dateinamen mit einer Länge von weniger als drei Bytes und
endet mit „/\.p?\z/“. Dies wurde nun behoben. Beachten Sie, dass es nie hätte passieren können
mit Modulnamen, die ohnehin an „use()“ oder „require()“ vergeben werden.

· Die Handhabung von Pfadnamen von Modulen, die an „require()“ übergeben werden, wurde threadsicher gemacht
VMS.

· Nicht blockierende Sockets wurden auf VMS behoben.

· Pod kann jetzt im Code innerhalb eines in Anführungszeichen gesetzten Konstrukts außerhalb einer Zeichenfolgenauswertung verschachtelt werden.
Dies funktionierte früher nur innerhalb von String-Auswertungen [perl #114040].

· „goto ''“ sucht nun nach einem leeren Label und erzeugt den Fehler „goto muss Label haben“.
Nachricht, anstatt das Programm zu beenden [perl #111794].

· „goto „\0““ stirbt jetzt mit „Can't find label“ anstelle von „goto must have label“.

· Die C-Funktion „hv_store“ führte früher zu Abstürzen, wenn sie auf „%^H“ verwendet wurde [perl #111000].

· Ein über „cv_set_call_checker“ an einen Abschlussprototyp angehängter Anrufprüfer wird jetzt kopiert
zu daraus geklonten Verschlüssen. Daher funktioniert „cv_set_call_checker“ jetzt innerhalb eines Attributs
Handler für eine Schließung.

· Das Schreiben in $^N hatte früher keine Auswirkung. Jetzt krächzt es mit „Änderung einer Lese-
standardmäßig „nur Wert“, dies kann jedoch durch einen benutzerdefinierten regulären Ausdruck überschrieben werden
Engine, wie bei $1 [perl #112184].

· „undef“ auf einem Steuerzeichen-Glob („undef *^H“) gibt keine fehlerhafte Warnung mehr aus
über Mehrdeutigkeit [perl #112456].

· Aus Effizienzgründen geben viele Operatoren und eingebaute Funktionen denselben Skalar zurück
jedes Mal. Lvalue-Subroutinen und Subroutinen im CORE::-Namespace erlaubten
dieses Implementierungsdetail zu durchsickern. "Drucke &CORE::uc("a"), &CORE::uc("b")"
verwendet, um "BB" zu drucken. Das gleiche würde mit einer lvalue-Unterroutine passieren, die zurückkehrt
der Rückgabewert von „uc“. Nun wird in solchen Fällen der Wert kopiert.

· „Methode {}“-Syntax mit einem leeren Block oder einem Block, der eine leere Liste zurückgibt
abstürzen oder einen zufälligen Wert auf dem Stapel als Aufrufer verwenden. Jetzt produziert es eine
Fehler.

· „vec“ funktioniert jetzt mit extrem großen Offsets (>2 GB) [perl #111730].

· Änderungen an den Überladungseinstellungen werden jetzt sofort wirksam, ebenso wie Änderungen an der Vererbung
die sich auf die Überlastung auswirken. Früher wurden sie erst nach „segnen“ wirksam.

Objekte, die erstellt wurden, bevor eine Klasse überladen war, blieben früher nicht-
überladen, auch wenn die Klasse durch „Use Overload“ oder @ISA überladen wurde
Änderungen, und auch nach „segnen“. Dies wurde behoben [perl #112708].

· Klassen mit Überladung können jetzt Fallback-Werte erben.

· Beim Überladen wurde der Fallback-Wert 0 nicht berücksichtigt, wenn überladene Objekte vorhanden waren
auf beiden Seiten eines Zuweisungsoperators wie „+=" [perl #111856].

· „pos“ krächzt jetzt mit Hash- und Array-Argumenten, anstatt fehlerhafte Ergebnisse zu erzeugen
Warnungen.

· „while(each %h)“ impliziert jetzt „while(definiert($_ = jedes %h))“, wie „readline“ und
„readdir“.

· Subs im CORE::-Namespace stürzen nach „undef *_“ nicht mehr ab, wenn sie mit „nr.“ aufgerufen werden
Argumentliste (&CORE::time ohne Klammern).

· „Unpack“ erzeugt nicht mehr den Fehler „‚/‘ muss beim Entpacken auf einen numerischen Typ folgen“, wenn
Schuld daran sind die Daten [perl #60204].

· „join“ und „@array“ rufen FETCH jetzt nur einmal für ein gebundenes $ auf“ [perl #8931].

· Einige Unterprogrammaufrufe, die durch das Kompilieren von Kernoperationen generiert werden, sind von einem „CORE::GLOBAL“ betroffen.
Beim Override wurde die Betriebsüberprüfung zweimal durchgeführt. Die Prüfung ist für rein immer idempotent
Perl-Code, aber die doppelte Prüfung kann wichtig sein, wenn benutzerdefinierte Aufrufprüfer beteiligt sind.

· Früher gab es in der Umgebung des Forks eine Race-Bedingung, die dazu führen konnte, dass ein Signal an den Fork gesendet wurde
Das übergeordnete Element muss sowohl vom übergeordneten als auch vom untergeordneten Element verwaltet werden. Die Signale sind jetzt in der Umgebung kurzzeitig blockiert
fork, um dies zu verhindern [perl #82580].

· Die Implementierung von Codeblöcken in regulären Ausdrücken wie „(?{})“ und
„(??{})“ wurde stark überarbeitet, um eine ganze Reihe von Fehlern zu beseitigen. Der Hauptbenutzer-
sichtbare Veränderungen sind:

· Codeblöcke innerhalb von Mustern werden jetzt im selben Durchgang wie die umgebenden Codeblöcke analysiert
Code; Insbesondere ist es nicht mehr erforderlich, eine ausgewogene Zahnspange zu haben: Dies jetzt
funktioniert:

/(?{ $x='{' })/

Dies bedeutet, dass diese Fehlermeldung nicht mehr generiert wird:

Sequenz (?{...}) nicht terminiert oder im regulären Ausdruck nicht {}-ausgeglichen

Es kann jedoch ein neuer Fehler auftreten:

Sequenz (?{...}) nicht mit ')' abgeschlossen

Darüber hinaus werden literale Codeblöcke innerhalb von Laufzeitmustern nur einmal kompiliert.
zur Perl-Kompilierungszeit:

für mein $p (...) {
# dieser 'FOO'-Codeblock wird einmal kompiliert,
# gleichzeitig mit der umgebenden „for“-Schleife
/$p{(?{FOO;})/;
}

· Lexikalische Variablen sind jetzt hinsichtlich Umfang, Rekursion und Abschlussverhalten vernünftig.
Insbesondere verhält sich „/A(?{B})C/“ (aus Sicht des Abschlusses) genau wie „/A/
&& do { B } && /C/“, während „qr/A(?{B})C/“ wie „sub {/A/ && do { B } && /C/}“ ist.
Dieser Code funktioniert nun also wie erwartet und erstellt drei reguläre Ausdrücke, die mit 0 übereinstimmen.
1 und 2:

für mein $i (0..2) {
push @r, qr/^(??{$i})$/;
}
"1" =~ $r[1]; # Streichhölzer

· Das Pragma „use re 'eval'“ ist jetzt nur noch für Codeblöcke erforderlich, die unter definiert sind
Laufzeit; Insbesondere im Folgenden ist der Text des $r-Musters still
in das neue Muster interpoliert und neu kompiliert, aber das Individuum kompiliert
Codeblöcke innerhalb von $r werden wiederverwendet, anstatt neu kompiliert zu werden, und „re ‚eval‘ verwenden“
wird nicht mehr benötigt:

my $r = qr/abc(?{....})def/;
/xyz$r/;

· Flusskontrolloperatoren stürzen nicht mehr ab. Jeder Codeblock läuft in einer neuen Dynamik
Umfang, daher werden bei „next“ usw. keine umschließenden Schleifen angezeigt. „return“ gibt einen Wert zurück
aus dem Codeblock, nicht aus einer umschließenden Unterroutine.

· Normalerweise speichert Perl die Kompilierung von Laufzeitmustern im Cache und führt keine Neukompilierung durch
Wenn sich das Muster nicht geändert hat, ist dies jetzt jedoch bei Bedarf deaktiviert
korrektes Verhalten von Verschlüssen. Zum Beispiel:

mein $code = '(??{$x})';
für mein $x (1..3) {
# neu kompilieren, um jedes Mal den neuen Wert von $x anzuzeigen
$x =~ /$code/;
}

· Die Flags „/msix“ und „(?msix)“ usw. werden jetzt in den Rückgabewert von weitergegeben
"(??{})"; das funktioniert jetzt:

"AB" =~ /a(??{'b'})/i;

· Warnungen und Fehler scheinen vom umgebenden Code (oder zur Laufzeit) zu stammen
Codeblöcke, aus einer Evaluierung) und nicht aus einer „re_eval“:

benutze re 'eval'; $c = '(?{ warn "foo" })'; /$c/;
/(?{ warnen "foo" })/;

gab früher:

foo in (re_eval 1) Zeile 1.
foo in (re_eval 2) Zeile 1.

und gibt jetzt:

foo in (eval 1) Zeile 1.
foo in /some/prog Zeile 2.

· Perl kann jetzt neu kompiliert werden, um jede Unicode-Version zu verwenden. In Version 5.16 hat es funktioniert
Unicodes 6.0 und 6.1, es gab jedoch verschiedene Fehler, wenn frühere Versionen verwendet wurden; Die
Je älter die Version, desto mehr Probleme.

· „vec“ erzeugt im Lvalue-Kontext keine „nicht initialisierten“ Warnungen mehr [perl #9423].

· Eine Optimierung mit festen Zeichenfolgen in regulären Ausdrücken könnte zu schwerwiegenden Problemen führen
Leistungseinbußen in Randfällen. Dies wurde behoben [perl #76546].

· In bestimmten Fällen kann das Einschließen leerer Untermuster innerhalb eines regulären Ausdrucks (z. B
„(?:)“ oder „(?:|)“) könnte einige Optimierungen deaktivieren. Dies wurde behoben.

· Die Meldung „Kann keine Operationsnummer finden“, die „prototype“ erzeugt, wenn eine Zeichenfolge übergeben wird
wie „CORE::nonexistent_keyword“ übergibt jetzt UTF-8 und eingebettete NULs unverändert
[Perl #97478].

· „Prototyp“ behandelt magische Variablen wie $1 jetzt genauso wie nicht-magische Variablen
bei der Suche nach dem Präfix CORE::, anstatt sie als Unterprogrammnamen zu behandeln.

· Unter Threaded-Perls könnte ein Laufzeitcodeblock in einem regulären Ausdruck die
Paketname im Op-Baum gespeichert, was zu schlechten Lesevorgängen in "Aufrufer" und möglicherweise . führt
stürzt ab [perl #113060].

· Verweisen auf einen Abschlussprototyp („\&{$_[1]}“ in einem Attributhandler für einen Abschluss) Nr
Länger führt zu einer Kopie der Subroutine (oder zu Assertionsfehlern beim Debuggen).
baut).

· „eval '__PACKAGE__'“ gibt jetzt die richtige Antwort auf Thread-Builds zurück, wenn der aktuelle
Paket wurde zugewiesen (wie in „*ThisPackage:: = *ThatPackage::“) [perl
#78742].

· Wenn ein Paket durch den von ihm aufgerufenen Code gelöscht wird, ist es für den „Aufrufer“ möglich, a zu sehen
Stapelrahmen, der zu diesem gelöschten Paket gehört. „Caller“ könnte abstürzen, wenn der Stash vorhanden wäre
Die Speicheradresse wurde für einen Skalar wiederverwendet und an derselben wurde eine Ersetzung durchgeführt
Skalar [perl #113486].

· „UNIVERSAL::can“ behandelt sein erstes Argument nicht mehr unterschiedlich, je nachdem, ob
Es handelt sich intern um eine Zeichenfolge oder Zahl.

· „Öffnen“ mit „<&“ für den Modus prüft, ob das dritte Argument eine Zahl ist, in
Bestimmen, ob es als Dateideskriptor oder Handle-Name behandelt werden soll. Magisch
Variablen wie $1 haben die numerische Prüfung immer nicht bestanden und wurden als Handle behandelt
Namen.

· Der Umgang von „warn“ mit magischen Variablen ($1, Krawatten) wurde mehreren Korrekturen unterzogen.
„FETCH“ wird jetzt nur noch einmal bei einem gebundenen Argument oder einem gebundenen $@ [perl #97480] aufgerufen. Gebunden
Variablen, die Objekte zurückgeben, die als „“ stringifiziert werden, werden nicht länger ignoriert. Ein unentschiedenes $@
das hat zufällig eine Referenz zurückgegeben früher Die Zeit, in der es verwendet wurde, ist nicht mehr vorhanden
ignoriert.

· „warn „“ behandelt $@ mit einer darin enthaltenen Zahl jetzt auf die gleiche Weise, unabhängig davon, ob dies der Fall ist
geschah über "$@=3" oder "$@="3"". Früher wurde Ersteres ignoriert. Jetzt hängt es an
„\t...caught“, wie es immer bei „$@="3" der Fall war.

· Numerische Operatoren für magische Variablen (z. B. „$1 + 1“) zur Verwendung von Gleitkommazahlen
Operationen, auch wenn Ganzzahloperationen besser geeignet waren, was zum Verlust von führte
Genauigkeit auf 64-Bit-Plattformen [perl #109542].

· Die unäre Negation behandelt eine Zeichenfolge nicht mehr als Zahl, wenn die Zeichenfolge zufällig verwendet wurde
als Zahl irgendwann. Wenn also $x die Zeichenfolge „dogs“ enthält, wird „-$x“ zurückgegeben
„-dogs“, auch wenn „$y=0+$x“ irgendwann passiert ist.

· In Perl v5.14 wurde „-'-10'“ so korrigiert, dass es „10“ und nicht „+10“ zurückgibt. Aber magische Variablen
($1, Unentschieden) wurden bisher nicht behoben [perl #57706].

· Die unäre Negation behandelt Zeichenfolgen jetzt konsistent, unabhängig vom internen „UTF8“.
Flagge.

· Eine in Perl v5.16.0 eingeführte Regression mit "tr/SUCHLISTE/ERSETZUNGSLISTE/" hat
behoben worden. Nur die erste Instanz soll sinnvoll sein, wenn ein Zeichen
erscheint mehr als einmal in "SUCHLISTE". Unter Umständen die letzte Instanz
überschrieb alle früheren. [Perl #113584]

· Reguläre Ausdrücke wie „qr/\87/“ fügten daher zuvor stillschweigend ein NUL-Zeichen ein
passend, als wäre es „qr/\00087/“ geschrieben worden. Jetzt passt es, als wäre es so gewesen
geschrieben als „qr/87/“, mit der Meldung, dass die Sequenz „\8“ nicht erkannt wird.

· "__SUB__" funktioniert jetzt in speziellen Blöcken ("BEGIN", "END", etc.).

· Die Thread-Erstellung unter Windows könnte theoretisch zu einem Absturz führen, wenn sie innerhalb eines Threads erfolgt
„BEGIN“-Block. Es funktioniert immer noch nicht richtig, aber es stürzt nicht mehr ab [perl
#111610].

· „\&{''}“ (mit der leeren Zeichenfolge) belebt jetzt automatisch einen Stub wie jeden anderen Unternamen und
Erzeugt nicht mehr den Fehler „Sub kann nicht erstellt werden“ [perl #94476].

· Eine in v5.14.0 eingeführte Regression wurde behoben, bei der einige Aufrufe des „re“
Modul würde $_ [perl #113750] überlasten.

· „do FILE“ setzt $@ jetzt immer entweder oder löscht es, auch wenn die Datei nicht gelesen werden kann. Das
stellt sicher, dass beim ersten Testen von $@ (wie in der Dokumentation empfohlen) immer Folgendes zurückgegeben wird
richtiges Ergebnis.

· Der für das „each @array“-Konstrukt verwendete Array-Iterator wird jetzt korrekt zurückgesetzt, wenn
@array wird gelöscht [perl #75596]. Dies geschieht beispielsweise, wenn das Array global ist
zugewiesen, wie in „@array = (...)“, aber nicht, wenn es so ist Werte zugeordnet sind. In Bezug auf
der XS-API bedeutet dies, dass „av_clear()“ nun den Iterator zurücksetzt.

Dies spiegelt das Verhalten des Hash-Iterators wider, wenn der Hash gelöscht wird.

· „$class->can“, „$class->isa“ und „$class->DOES“ geben jetzt korrekte Ergebnisse zurück.
unabhängig davon, ob das Paket, auf das $class verweist, existiert [perl #47113].

· Ankommende Signale löschen $@ nicht mehr [perl #45173].

· Erlauben Sie „my()“-Deklarationen mit einer leeren Variablenliste [perl #113554].

· Während der Analyse hinterlassen nach Fehlern deklarierte Subs keine Stubs mehr [perl #113712].

· Abschlüsse, die keine String-Auswertungen enthalten, hängen nicht länger an den enthaltenen Unterroutinen fest.
Ermöglicht die Freigabe von Variablen, die von äußeren Unterprogrammen geschlossen werden, wenn die äußere Unterroutine dies tut
freigegeben, auch wenn das innere Sub noch existiert [perl #89544].

· Duplizieren von In-Memory-Dateihandles durch Öffnen mit gestopptem „<&="- oder „>&="-Modus
Funktioniert ordnungsgemäß in Version 5.16.0. Dies führte dazu, dass das neue Handle auf ein anderes verwies
Skalare Variable. Dies wurde behoben [perl #113764].

· „qr//“-Ausdrücke stürzen nicht mehr mit benutzerdefinierten Engines für reguläre Ausdrücke ab, bei denen dies nicht der Fall ist
Setze „Offs“ zur Kompilierungszeit regulärer Ausdrücke [perl #112962].

· „lokal löschen“ stürzt bei bestimmten magischen Arrays und Hashes nicht mehr ab [perl
#112966].

· „Lokal“ auf Elementen bestimmter magischer Arrays und Hashes, die nicht verwendet werden, um zu arrangieren
Das Element wird beim Beenden des Bereichs gelöscht, auch wenn das Element vor „local“ nicht existierte.

· „scalar(write)“ gibt nicht mehr mehrere Elemente zurück [perl #73690].

· Bei der Konvertierung von Strings in Gleitkommawerte werden bestimmte Strings unter „use“ nicht mehr falsch gespart
Gebietsschema“ [perl #109318].

· @INC-Filter, die sterben, verlieren keinen Speicher mehr [perl #92252].

· Die Implementierungen überladener Operationen werden jetzt im richtigen Kontext aufgerufen.
Dies ermöglicht unter anderem, dass „<>“ ordnungsgemäß überschrieben werden kann [perl #47119].

· Die Angabe nur der „Fallback“-Taste beim Aufruf von „Use Overload“ verhält sich jetzt korrekt
[Perl #113010].

· „sub foo { my $a = 0; while ($a) { ... } }“ und „sub foo { while (0) { ... } }“ jetzt
Gib das Gleiche zurück [perl #73618].

· Die String-Negation verhält sich jetzt unter „Ganzzahl verwenden;“ gleich. wie es ohne [perl
#113012].

· „chr“ gibt jetzt das Unicode-Ersatzzeichen (U+FFFD) für -1 zurück, unabhängig davon
interne Darstellung. -1 wird zum Umbrechen verwendet, wenn das Argument gebunden oder eine Zeichenfolge war
im Inneren.

· Die Verwendung eines „Formats“ nach der Freigabe des umschließenden Subs könnte ab Perl v5.12.0 abstürzen, wenn
Das Format verwies auf lexikalische Variablen aus dem äußeren Sub.

· Die Verwendung eines „Formats“, nachdem das umschließende Sub undefiniert war, konnte ab Perl v5.10.0 zum Absturz führen.
wenn das Format auf lexikalische Variablen aus dem äußeren Sub verwies.

· Verwendung eines in einem Abschluss definierten „Formats“, das auf lexikalische Variablen verweist
von außen funktionierte nie wirklich, es sei denn, der „write“-Aufruf erfolgte direkt im Inneren
Schließung. In Version 5.10.0 begann es sogar abzustürzen. Nun die Kopie dieses Verschlusses am nächsten
Der obere Teil des Aufrufstapels wird verwendet, um diese Variablen zu finden.

· Formate, die Variablen in speziellen Blöcken schließen, stürzen nicht mehr ab, wenn ein Stub vorhanden ist
mit demselben Namen wie der Spezialblock, bevor der Spezialblock kompiliert wird.

· Der Parser gerät nicht mehr durcheinander und behandelt „eval foo ()“ als Syntaxfehler, wenn
mit vorangestelltem „print;“ [perl #16249].

· Der Rückgabewert von „syscall“ wird auf 64-Bit-Plattformen nicht mehr gekürzt [perl
#113980].

· Ständiges Falten führt nicht mehr dazu, dass „print 1 ? FOO : BAR“ auf dem FOO-Handle gedruckt wird
[Perl #78064].

· „do subname“ ruft jetzt das benannte Unterprogramm auf und verwendet stattdessen den Dateinamen, den es zurückgibt
eine Datei mit dem Namen „subname“ zu öffnen.

· Von rv2cv-Check-Hooks nachgeschlagene Unterroutinen (von XS-Modulen registriert) werden jetzt verwendet
Dies wird bei der Entscheidung berücksichtigt, ob „foo bar“ der Unteraufruf sein soll
„foo(bar)“ oder der Methodenaufruf „“bar“->foo“.

· „CORE::foo::bar“ wird nicht mehr speziell behandelt, sodass globale Überschreibungen möglich sind
direkt aufgerufen über „CORE::GLOBAL::uc(...)“ [perl #113016].

· Der Aufruf eines undefinierten Subs, dessen Typeglob undefiniert ist, erzeugt jetzt das Übliche
Fehler „Undefinierte Unterroutine aufgerufen“ anstelle von „Keine CODE-Referenz“.

· Zwei Fehler im Zusammenhang mit @ISA wurden behoben. „*ISA = *glob_without_array“ und „undef
*IST EIN; @{*ISA}“ würde verhindern, dass zukünftige Änderungen an @ISA das interne aktualisieren
Caches, die zum Nachschlagen von Methoden verwendet werden. Der Fall *glob_without_array war eine Regression von
Perl v5.12.

· Optimierungen regulärer Ausdrücke führten manchmal dazu, dass „$“ mit „/m“ fehlschlug oder erzeugte
falsche Übereinstimmungen [perl #114068].

· „__SUB__“ funktioniert jetzt in einem „Sort“-Block, wenn die umschließende Unterroutine vordeklariert ist
mit „sub foo;“ Syntax [perl #113710].

· Unicode-Eigenschaften gelten nur für Unicode-Codepunkte, was zu einigen Feinheiten führt
wenn reguläre Ausdrücke mit Codepunkten oberhalb von Unicode abgeglichen werden. Da ist ein
Warnung generiert, um Sie darauf aufmerksam zu machen. Allerdings war diese Warnung
In manchen Fällen wird es unangemessen generiert, beispielsweise wenn ein Programm analysiert wird.
Nicht-Unicode-Übereinstimmungen wie „\w“ und „[:word:]“ sollten die Warnung nicht generieren, da
Ihre Definitionen beschränken sie nicht darauf, nur auf Unicode-Codepunkte anzuwenden. Jetzt die
Die Meldung wird nur beim Abgleich mit „\p{}“ und „\P{}“ generiert. Es bleibt ein
Fehler, [perl #114148], für die sehr wenigen Eigenschaften in Unicode, die nur mit einer einzigen übereinstimmen
Codepunkt. Die Warnung wird nicht generiert, wenn sie mit einem höheren Unicode abgeglichen werden
Codepunkt.

· Nicht initialisierte Warnungen, die Hash-Elemente erwähnen, würden den Elementnamen nur erwähnen, wenn
Aufgrund eines Off-by-One-Fehlers befand es sich nicht im ersten Bucket des Hash.

· Ein Fehler im Optimierer für reguläre Ausdrücke könnte dazu führen, dass sich das mehrzeilige „^“ in nicht richtig verhält
das Vorhandensein von Zeilenumbrüchen, sodass „“/\n\n“ =~ m#\A(?:^/$)#im“ nicht übereinstimmen würde
[Perl #115242].

· Ein fehlgeschlagener „Fork“ im Listenkontext führt nicht mehr zu einer Beschädigung des Stapels. „@a = (1, 2, fork, 3)“
Wird verwendet, um die 2 zu verschlingen und „(1, undef, 3)“ zuzuweisen, wenn der „fork“-Aufruf fehlgeschlagen ist.

· Zahlreiche Speicherlecks wurden behoben, hauptsächlich im Zusammenhang mit gebundenen Variablen, die absterben.
Zeichenklassen und Codeblöcke für reguläre Ausdrücke sowie Syntaxfehler.

· Zuweisen eines regulären Ausdrucks („${qr//}“) zu einer Variablen, die zufällig ein enthält
Gleitkommazahlen verursachen beim Debuggen von Builds keine Assertionsfehler mehr.

· Das Zuweisen eines regulären Ausdrucks zu einem Skalar, der eine Zahl enthält, führt nicht mehr dazu
anschließende Numerierung zur Erzeugung von Zufallszahlen.

· Das Zuweisen eines regulären Ausdrucks zu einer magischen Variablen löscht die Magie nicht mehr aus.
Dies war eine Regression gegenüber Version 5.10.

· Das Zuweisen eines regulären Ausdrucks zu einem gesegneten Skalar führt nicht mehr zu Abstürzen. Das
war auch eine Regression von v5.10.

· Regulärer Ausdruck kann jetzt gebundenen Hash- und Array-Elementen mit Abflachung zugewiesen werden
in Saiten.

· Die Numerierung eines regulären Ausdrucks führt nicht mehr zu einer nicht initialisierten Warnung.

· Negative Array-Indizes führen nicht mehr dazu, dass EXISTS-Methoden gebundener Variablen ignoriert werden.
Dies war eine Regression gegenüber Version 5.12.

· Negative Array-Indizes führen nicht mehr zu Abstürzen bei Arrays, die an Nicht-Objekte gebunden sind.

· „$byte_overload .= $utf8“ führt nicht mehr zu doppelt codiertem UTF-8, wenn die linke Seite
Beim letzten Aufruf der Überladung hat scalar zufällig einen UTF-8-String erzeugt.

· „goto &sub“ verwendet jetzt den aktuellen Wert von @_, anstatt das Array the zu verwenden
Unterprogramm wurde ursprünglich mit aufgerufen. Das bedeutet jetzt „local @_ = (...); goto &sub“.
funktioniert [perl #43077].

· Wenn ein Debugger rekursiv aufgerufen wird, stampft er nicht mehr auf seinem eigenen Lexikon herum
Variablen. Früher nutzten alle Aufrufe unter Rekursion denselben lexikalischen Satz
Variablen [perl #115742].

· *_{ARRAY}, das von einer Unterroutine zurückgegeben wird, wird nicht mehr spontan leer.

· Wenn Sie „say“ verwenden, um auf ein gebundenes Dateihandle zu drucken, ist der Wert von „$\“ korrekt
lokalisiert, auch wenn es zuvor undef war. [perl #119927]

Bekannt Probleme


· Mit UTF8 gekennzeichnete Zeichenfolgen in %ENV unter HP-UX 11.00 sind fehlerhaft

Das Zusammenspiel von UTF8-markierten Zeichenfolgen und %ENV unter HP-UX 11.00 ist derzeit fragwürdig
auf eine noch nicht vollständig diagnostizierte Weise. Erwarten Sie Testfehler in t/op/magic.t, Gefolgt von
Unbekanntes Verhalten beim Speichern von Breitzeichen in der Umgebung.

Nachruf


Hojung Yoon (AMORETTE), 24, aus Seoul, Südkorea, legte am 8. Mai 2013 seine lange Ruhepause ein
mit Lama-Figur und signierter TIMTOADY-Karte. Er war ein brillanter junger Perl 5 und 6
Hacker und engagiertes Mitglied von Seoul.pm. Er programmierte Perl, sprach Perl, aß Perl und
liebte Perl. Wir glauben, dass er immer noch mit seinem kaputten IBM-Laptop in Perl programmiert
irgendwo. Er wird vermisst werden.

Danksagung


Perl v5.18.0 repräsentiert ungefähr 12 Monate Entwicklungszeit seit Perl v5.16.0 und
enthält ungefähr 400,000 Änderungszeilen in 2,100 Dateien von 113 Autoren.

Perl blüht dank einer lebendigen Benutzer-Community auch im dritten Jahrzehnt auf
und Entwickler. Von den folgenden Personen ist bekannt, dass sie zu den Verbesserungen beigetragen haben
wurde Perl v5.18.0:

Aaron Crane, Aaron Trevena, Abhijit Menon-Sen, Adrian M. Enache, Alan Haggai Alavi,
Alexandr Ciornii, Andrew Tam, Andy Dougherty, Anton Nikishaev, Aristoteles Pagaltzis,
Augustina Blair, Bob Ernst, Brad Gilbert, Breno G. de Oliveira, Brian Carlson, Brian
Fraser, Charlie Gonzalez, Chip Salzenberg, Chris „BinGOs“ Williams, Christian Hansen,
Colin Kuskie, Craig A. Berry, Dagfinn Ilmari Mannsaaker, Daniel Dragan, Daniel Perrett,
Darin McBride, Dave Rolsky, David Golden, David Leadbeater, David Mitchell, David Nicol,
Dominic Hargreaves, E. Choroba, Eric Brine, Evan Miller, Pater Chrysostomos, Florian
Ragwitz, Francois Perrad, George Greer, Goro Fuji, H.Merijn Brand, Herbert Breunung, Hugo
van der Sanden, Igor Zaytsev, James E. Keenan, Jan Dubois, Jasmine Ahuja, Jerry D. Hedden,
Jess Robinson, Jesse Luehrs, Joaquin Ferrero, Joel Berger, John Goodyear, John Peacock,
Karen Etheridge, Karl Williamson, Karthik Rajagopalan, Kent Fredric, Leon Timmermans,
Lucas Holt, Lukas Mai, Marcus Holland-Moritz, Markus Jansen, Martin Hasch, Matthew
Horsfall, Max Maischein, Michael G. Schwern, Michael Schroeder, Moritz Lenz, Nicholas
Clark, Niko Tyni, Oleg Nesterov, Patrik Haegglund, Paul Green, Paul Johnson, Paul
Marquess, Peter Martini, Rafael Garcia-Suarez, Reini Urban, Renee Baecker, Rhesa
Rozendaal, Ricardo Signes, Robin Barker, Ronald J. Kimball, Ruslan Zakirov, Salvador
Fandin~o, Sawyer X, Scott Lanning, Sergey Alekseev, Shawn M Moore, Shirakata Kentaro,
Shlomi Fish, Sisyphos, Smylers, Steffen Mueller, Steve Hay, Steve Peters, Steven
Schubiger, Sullivan Beck, Sven Strickroth, Sebastien Aperghis-Tramoni, Thomas Sibley,
Tobias Leich, Tom Wyant, Tony Cook, Vadim Konovalov, Vincent Pit, Volker Schatz, Walt
Mankowski, Yves Orton, Zefram.

Die obige Liste ist mit ziemlicher Sicherheit unvollständig, da sie automatisch generiert wird aus
Geschichte der Versionskontrolle. Insbesondere enthält es nicht die Namen der (sehr viel
geschätzt) Mitwirkenden, die dem Perl-Bugtracker Probleme gemeldet haben.

Viele der in dieser Version enthaltenen Änderungen haben ihren Ursprung in den CPAN-Modulen, die in
Perls Kern. Wir sind der gesamten CPAN-Community dankbar, dass sie Perl zum Gedeihen verholfen hat.

Eine vollständigere Liste aller historischen Mitwirkenden von Perl finden Sie im AUTOREN
Datei in der Perl-Quelldistribution.

Reporting Fehler


Wenn Sie feststellen, dass es sich um einen Fehler handelt, können Sie die kürzlich auf der Website veröffentlichten Artikel überprüfen
comp.lang.perl.misc-Newsgroup und die Perl-Bug-Datenbank unter http://rt.perl.org/perlbug/ .
Möglicherweise gibt es auch Informationen unter http://www.perl.org/ , die Perl-Homepage.

Wenn Sie glauben, dass Sie einen nicht gemeldeten Fehler haben, führen Sie bitte das im Lieferumfang enthaltene perlbug-Programm aus
deine Freilassung. Achten Sie darauf, Ihren Fehler auf einen winzigen, aber ausreichenden Testfall zu reduzieren. Dein Fehler
Bericht wird zusammen mit der Ausgabe von "perl -V" gesendet an [E-Mail geschützt] sein
vom Perl-Portierungsteam analysiert.

Wenn der von Ihnen gemeldete Fehler Sicherheitsauswirkungen hat, die es unangemessen machen,
an eine öffentlich archivierte Mailingliste senden, dann senden Sie sie bitte an
[E-Mail geschützt] . Dies weist auf ein geschlossenes, nicht archiviertes Mailing hin
Liste, die alle wichtigen Committer enthält, die bei der Bewertung der Auswirkungen helfen können
von Problemen, finden Sie eine Lösung und helfen Sie, die Veröffentlichung von Patches zu koordinieren
das Problem auf allen Plattformen, auf denen Perl unterstützt wird, mildern oder beheben. Bitte nur
Verwenden Sie diese Adresse für Sicherheitsprobleme im Perl-Kern, nicht für Module unabhängig
auf CPAN verteilt.

Verwenden Sie perl5180delta online mit den onworks.net-Diensten


Kostenlose Server & Workstations

Laden Sie Windows- und Linux-Apps herunter

Linux-Befehle

Ad




×
Werbung
❤ ️Hier einkaufen, buchen oder kaufen – kostenlos, damit die Dienste kostenlos bleiben.