Dies ist der Befehl perl56delta, 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
perl56delta - was ist neu für perl v5.6.0
BESCHREIBUNG
Dieses Dokument beschreibt die Unterschiede zwischen dem Release 5.005 und dem Release 5.6.0.
Core Erweiterung
Dolmetscher Klonen, Fäden, und Parallelität
Perl 5.6.0 führt die Anfänge der Unterstützung für die Ausführung mehrerer Interpreter ein
gleichzeitig in verschiedenen Threads. In Verbindung mit perl_clone() API-Aufruf, der
kann verwendet werden, um den Status eines bestimmten Interpreters selektiv zu duplizieren, es ist möglich,
einen Codeabschnitt einmal in einem Interpreter kompilieren, diesen Interpreter ein- oder mehrmals klonen,
und führen Sie alle resultierenden Interpreter in verschiedenen Threads aus.
Auf der Windows-Plattform wird diese Funktion verwendet, um Gabel() auf Dolmetscherebene.
Siehe perlfork für Details dazu.
Diese Funktion befindet sich noch in der Entwicklung. Es soll schließlich verwendet werden, um selektiv
eine Unterroutine und Daten, die von dieser Unterroutine aus erreichbar sind, in einem separaten Interpreter klonen und
Führen Sie die geklonte Unterroutine in einem separaten Thread aus. Da es keine gemeinsamen Daten zwischen den
Interpreter werden nur wenige oder keine Sperren benötigt (es sei denn, Teile der Symboltabelle sind
explizit geteilt). Dies ist offensichtlich ein einfach zu bedienender Ersatz für die
Unterstützung vorhandener Threads.
Die Unterstützung für das Klonen von Interpretern und die Interpreter-Gleichzeitigkeit können mit dem . aktiviert werden
-Dusethreads Configure-Option (siehe win32/Makefile für die Aktivierung unter Windows.)
Die resultierende ausführbare Perl-Datei ist funktional identisch mit einer, die mit erstellt wurde
-DVielfalt, aber die perl_clone() Der API-Aufruf wird nur in ersterem verfügbar sein.
-Dusethreads aktiviert standardmäßig das cpp-Makro USE_ITHREADS, das wiederum Perl aktiviert
Quellcode-Änderungen, die eine klare Trennung zwischen dem Op-Baum und den darin enthaltenen Daten ermöglichen
arbeitet mit. Ersteres ist unveränderlich und kann daher zwischen einem geteilt werden
Interpreter und alle seine Klone, während letzterer als lokal für jeden betrachtet wird
Interpreter und wird daher für jeden Klon kopiert.
Beachten Sie, dass das Erstellen von Perl mit der Option -Dusemultiplicity Configure ausreichend ist, wenn Sie
möchte mehrere laufen unabhängig Interpreter gleichzeitig in verschiedenen Threads.
-Dusethreads bietet nur die zusätzliche Funktionalität des perl_clone() API-Aufruf und
andere Unterstützung beim Laufen geklont Dolmetscher gleichzeitig.
HINWEIS: Dies ist eine experimentelle Funktion. Implementierungsdetails sind
Änderungen vorbehalten.
Lexikalisch Umfang Warnung Kategorien
Sie können jetzt die Granularität von Warnungen, die von perl ausgegeben werden, mit den
Pragma "Warnungen verwenden". warnings und perllexwarn haben umfangreiche Dokumentationen dazu
-Funktion
Unicode und UTF-8 Unterstützung
Perl verwendet jetzt UTF-8 als seine interne Darstellung für Zeichenketten. Die "utf8" und
"Bytes"-Pragmas werden verwendet, um diese Unterstützung im aktuellen lexikalischen Geltungsbereich zu steuern. Sehen
perlunicode, utf8 und bytes für weitere Informationen.
Es wird erwartet, dass sich diese Funktion schnell weiterentwickeln wird, um eine Form von E/A-Disziplinen zu unterstützen, die
kann verwendet werden, um die Art der Ein- und Ausgabedaten (Bytes oder Zeichen) anzugeben. Noch bis
In diesem Fall werden zusätzliche Module von CPAN benötigt, um das Toolkit für . zu vervollständigen
Umgang mit Unicode.
HINWEIS: Dies sollte als experimentelle Funktion betrachtet werden. Implementierung
Details können sich ändern.
Unterstützung für interpolieren namens Zeichen
Das neue "\N"-Escape interpoliert benannte Zeichen innerhalb von Strings. Beispiel: „Hallo!
\N{WHITE SMILING FACE}" wird zu einem String mit einem Unicode-Smiley am Ende ausgewertet.
"unsere" Erklärungen
Eine „unsere“ Deklaration führt einen Wert ein, der am besten als lexikalisch bereicherter verstanden werden kann
symbolischer Alias für eine globale Variable im Paket, die dort aktuell war, wo die Variable war
erklärt. Dies ist meist als Alternative zum "vars"-Pragma sinnvoll, bietet aber auch
die Möglichkeit, Typisierung und andere Attribute für solche Variablen einzuführen. Siehe "unsere" in
perlfunc.
Unterstützung für Streicher vertreten as a Vektor of Ordnungszahlen
Literale der Form "v1.2.3.4" werden jetzt als Zeichenfolge aus Zeichen mit dem geparst
angegebenen Ordnungszahlen. Dies ist eine alternative, lesbarere Methode zum Konstruieren (möglicherweise
unicode) Zeichenfolgen anstelle von Interpolationszeichen, wie in "\x{1}\x{2}\x{3}\x{4}". Der
führendes "v" kann weggelassen werden, wenn es mehr als zwei Ordnungszahlen gibt, also wird 1.2.3 geparst
wie "v1.2.3".
In dieser Form geschriebene Zeichenfolgen sind auch nützlich, um Versions-"Nummern" darzustellen. Es ist leicht
um solche Versions-"Nummern" (die eigentlich nur einfache Zeichenfolgen sind) mit einem der
übliche String-Vergleichsoperatoren "eq", "ne", "lt", "gt" usw. oder führen bitweise Strings aus
Operationen auf ihnen mit "|", "&" usw.
In Verbindung mit der neuen magischen Variablen $^V (die die Perl-Version als a . enthält
string), können solche Literale als lesbare Methode verwendet werden, um zu überprüfen, ob Sie a . ausführen
bestimmte Version von Perl:
# dies wird auch in älteren Versionen von Perl geparst
if ($^V und $^V gt v5.6.0) {
# neue Funktionen unterstützt
}
"require" und "use" haben auch eine besondere Magie, um solche Literale zu unterstützen, aber dies
Eine bestimmte Verwendung sollte vermieden werden, da dies zu irreführenden Fehlermeldungen führt
Versionen von Perl, die keine Vektorzeichenfolgen unterstützen. Die Verwendung einer echten Versionsnummer wird
Korrektes Verhalten in allen Perl-Versionen sicherstellen:
erfordern 5.006; # Laufzeitprüfung für v5.6
5.006_001 verwenden; # Überprüfung der Kompilierzeit für v5.6.1
Außerdem unterstützen "sprintf" und "printf" das Perl-spezifische Format-Flag %v zum Drucken von Ordinalzahlen von
Zeichen in beliebigen Strings:
printf "v%vd", $^V; # druckt die aktuelle Version, z. B. "v5.5.650"
printf "%*vX", ":", $addr; # formatiert IPv6-Adresse
printf "%*vb", " ", $bits; # zeigt Bitstring an
Weitere Informationen finden Sie unter "Skalarwertkonstruktoren" in perldata.
Verbesserte Perl Version Nummerierung fragst
Ab Perl-Version 5.6.0 wurde die Versionsnummernkonvention in a . geändert
"dotted integer"-Schema, das häufiger in Open-Source-Projekten zu finden ist.
Wartungsversionen von v5.6.0 werden als v5.6.1, v5.6.2 usw. veröffentlicht
Entwicklungsreihen nach v5.6.0 werden mit v5.7.x nummeriert, beginnend mit v5.7.0, und
die nächste große Produktionsversion nach v5.6.0 wird v5.8.0 sein.
Das englische Modul setzt jetzt $PERL_VERSION auf $^V (einen Zeichenfolgenwert) statt auf $] (a
Zahlenwert). (Dies ist eine potenzielle Inkompatibilität. Senden Sie uns einen Bericht über perlbug, wenn
Sie sind davon betroffen.)
Die Syntax von v1.2.3 ist jetzt auch in Perl zulässig. Siehe "Unterstützung für Zeichenfolgen, die als a . dargestellt werden
Vektor der Ordnungszahlen" für mehr dazu.
Um der Verwendung von mindestens drei signifikanten Stellen durch das neue Versionsverwaltungssystem gerecht zu werden
Versionskomponente hat sich auch die Methode zum Erhöhen der Subversionsnummer geändert
leicht. Wir gehen davon aus, dass ältere Versionen als v5.6.0 die Subversion inkrementiert haben
Komponente in Vielfachen von 10. Versionen nach v5.6.0 werden sie um 1 erhöhen.
mit der neuen Notation ist 5.005_03 das "gleiche" wie v5.5.30 und die erste Wartung
Version nach v5.6.0 wird v5.6.1 sein (was als äquivalent zu a gelesen werden sollte)
Gleitkommawert 5.006_001 im älteren Format, gespeichert in $]).
New Syntax für erklärt Subroutine Attribute
Früher, wenn Sie eine Unterroutine als Methodenaufruf kennzeichnen wollten oder einen
maschinell sperren() bei der Eingabe musste man das mit einem "use attrs"-Pragma in . deklarieren
der Rumpf des Unterprogramms. Das kann jetzt mit Deklarationssyntax erreicht werden, wie
Dies:
sub mymethod : gesperrte Methode;
...
sub mymethod: gesperrte Methode {
...
}
sub othermethod :locked :method;
...
sub othermethod :locked :method {
...
}
(Beachten Sie, dass nur das erste ":" obligatorisch ist und das Leerzeichen, das das ":" umgibt, ist
Optional.)
AutoSplit.pm und SelfLoader.pm wurden aktualisiert, um die Attribute mit den Stubs beizubehalten
Sie liefern. Siehe Attribute.
Reichen Sie das und Verzeichnis Griffe können. be autoviviert
Ähnlich wie Konstrukte wie "$x->[0]" eine Referenz automatisch beleben, behandeln Konstruktoren
(öffnen(), opendir (), Rohr(), Steckdosenpaar(), sysopen(), Socket () und accept ()) jetzt
autovivify ein Datei- oder Verzeichnis-Handle, wenn das an sie übergebene Handle ein nicht initialisiertes ist
skalare Variable. Dies ermöglicht die Konstrukte wie "open(my $fh, ...)" und "open(local
$fh,...)", um Dateihandles zu erstellen, die bequem automatisch geschlossen werden
wenn der Geltungsbereich endet, vorausgesetzt, es gibt keine anderen Verweise darauf. Dies weitgehend
eliminiert die Notwendigkeit von Typeglobs beim Öffnen von Dateihandles, die herumgereicht werden müssen, da
im folgenden Beispiel:
unter myopen {
öffne mein $fh, "@_"
or sterben "Kann '@_' nicht öffnen: $!";
Rückgabe $fh;
}
{
mein $f = meinopen("
<$f> drucken;
# $f hier implizit geschlossen
}
öffnen() mit mehr als XNUMX Argumente
If öffnen() werden drei statt zwei Argumente übergeben, das zweite Argument wird als
mode und das dritte Argument wird als Dateiname verwendet. Dies ist in erster Linie nützlich für
Schutz vor unbeabsichtigtem magischem Verhalten der traditionellen Form mit zwei Argumenten. Sehen
"offen" in perlfunc.
64-bit Unterstützung
Jede Plattform, die entweder 64-Bit-Ganzzahlen hat
(1) nativ als longs oder ints
(2) über spezielle Compiler-Flags
(3) mit long long oder int64_t
kann "Quads" (64-Bit-Ganzzahlen) wie folgt verwenden:
· Konstanten (dezimal, hexadezimal, oktal, binär) im Code
· Argumente zu oct () und verhexen()
· Argumente zu drucken(), printf () und sprintf() (Flaggenpräfixe ll, L, q)
· als solche gedruckt
· Pack() und auspacken() „q“- und „Q“-Formate
· in Grundrechenarten: + - * / % (HINWEIS: Arbeiten nahe den Grenzen der ganzen Zahl
Werte können zu überraschenden Ergebnissen führen)
· in Bit-Arithmetik: & | ^ ~ << >> (HINWEIS: Diese wurden früher gezwungen, 32 Bit breit zu sein
aber jetzt mit der vollen nativen Breite arbeiten.)
· vec()
Beachten Sie, dass Sie Perl konfigurieren und kompilieren müssen, es sei denn, der Fall (a) ist mit
das Flag -Duse64bitint Configure.
HINWEIS: Die Konfigurationsflags -Duselonglong und -Duse64bits wurden
veraltet. Verwenden Sie stattdessen -Duse64bitint.
Tatsächlich gibt es zwei 64-Bit-Modi: Der erste wird mit Configure . erreicht
-Duse64bitint und die zweite mit Configure -Duse64bitall. Der Unterschied ist, dass
der erste ist minimal und der zweite maximal. Der erste funktioniert an mehr Stellen als
der Zweite.
Das "use64bitint" tut nur so viel, wie nötig ist, um 64-Bit-Ganzzahlen in Perl zu bekommen (dieses
kann zum Beispiel bedeuten, dass Sie "lange Longs" verwenden, während Ihr Gedächtnis möglicherweise immer noch auf 2 . begrenzt ist
Gigabyte (weil Ihre Zeiger immer noch 32-Bit sein könnten). Beachten Sie, dass der Name "64bitint"
bedeutet nicht, dass Ihr C-Compiler 64-Bit-"int"s verwendet (möglicherweise, aber nicht
müssen): das "use64bitint" bedeutet, dass Sie einen 64 Bit breiten Skalar haben können
Werte.
Das "use64bitall" geht den ganzen Weg, indem es versucht, auch Ganzzahlen zu wechseln (wenn es kann),
Longs (und Zeiger) auf 64-Bit. Dies kann zu einer noch stärker binären Inkompatibilität führen
Perl als -Duse64bitint: Die resultierende ausführbare Datei kann in einer 32-Bit-Box möglicherweise überhaupt nicht ausgeführt werden, oder
Möglicherweise müssen Sie Ihr Betriebssystem neu starten/rekonfigurieren/neu erstellen, um 64-Bit-fähig zu sein.
64-Bit-Systeme wie Alpha und Cray benötigen nativ weder -Duse64bitint noch -Duse64bitall.
Zu guter Letzt: Beachten Sie, dass aufgrund der Gewohnheit von Perl, immer Gleitkommazahlen zu verwenden,
die Quads sind immer noch keine echten ganzen Zahlen. Wenn Quads ihre Grenzen überschreiten
(0...18_446_744_073_709_551_615 unsigned,
-9_223_372_036_854_775_808...9_223_372_036_854_775_807 signed), they are silently promoted
zu Gleitkommazahlen, danach verlieren sie an Genauigkeit (in ihren unteren
Ziffern).
HINWEIS: Die 64-Bit-Unterstützung ist auf den meisten Plattformen noch experimentell.
Die bestehende Unterstützung deckt nur das LP64-Datenmodell ab. Insbesondere die
Das LLP64-Datenmodell wird noch nicht unterstützt. 64-Bit-Bibliotheken und -System
APIs auf vielen Plattformen haben sich nicht stabilisiert – Ihre Laufleistung kann variieren.
Large Datei Unterstützung
Wenn Sie Dateisysteme haben, die "große Dateien" (Dateien größer als 2 Gigabyte) unterstützen, können Sie
jetzt auch in der Lage sein, sie aus Perl zu erstellen und darauf zuzugreifen.
HINWEIS: Die Standardaktion besteht darin, die Unterstützung für große Dateien zu aktivieren, wenn
auf der Plattform verfügbar.
Wenn die Unterstützung für große Dateien aktiviert ist und Sie eine Fcntl-Konstante O_LARGEFILE haben, wird die
O_LARGEFILE wird automatisch zu den Flags von . hinzugefügt sysopen().
Beachten Sie, dass Ihr Dateisystem nicht auch "sparse files" unterstützt, die zig
Petabyte sind möglicherweise nicht ratsam.
Beachten Sie, dass Sie nicht nur ein geeignetes Dateisystem benötigen, um große Dateien zu erstellen, sondern auch
müssen Sie Ihre Pro-Prozess- (oder Pro-System- oder Pro-Prozess-Gruppe- oder Pro-Benutzer-
group) maximale Dateigrößenbeschränkungen, bevor Perl-Skripte ausgeführt werden, die versuchen, mit großen Dateien umzugehen,
insbesondere wenn Sie beabsichtigen, solche Dateien zu schreiben.
Schließlich können Sie zusätzlich zu den maximalen Dateigrößenbeschränkungen für Prozesse/Prozessgruppen Folgendes haben:
Quotenbeschränkungen für Ihre Dateisysteme, die Sie (Ihre Benutzer-ID oder Ihre Benutzergruppen-ID) daran hindern
große Dateien verwenden.
Das Anpassen Ihrer Prozess-/Benutzer-/Gruppen-/Dateisystem-/Betriebssystemgrenzen liegt außerhalb des Rahmens
der Perl-Kernsprache. Bei Prozesslimits können Sie versuchen, die Limits mit Ihrem . zu erhöhen
den Befehl limit/limit/ulimit der Shell, bevor Sie Perl ausführen. Die BSD::Ressource-Erweiterung (nicht
in der Standard-Perl-Distribution enthalten) kann ebenfalls von Nutzen sein, es bietet die
getrlimit/setrlimit-Schnittstelle, die verwendet werden kann, um die Nutzungsgrenzen von Prozessressourcen anzupassen,
einschließlich der maximalen Dateigrößenbeschränkung.
lang Doppel
In einigen Systemen können Sie möglicherweise lange Doppel verwenden, um die Reichweite und Präzision von zu verbessern
Ihre Gleitkommazahlen mit doppelter Genauigkeit (also die Zahlen von Perl). Verwenden Sie Konfigurieren
-Duselongdouble, um diese Unterstützung zu aktivieren (falls verfügbar).
"mehr Bits"
Sie können "-Dusemorebits konfigurieren", um sowohl die 64-Bit-Unterstützung als auch das lange Doppel zu aktivieren
unterstützen.
Verbesserte Unterstützung für Sortieren() Unterprogramme
Perl-Subroutinen mit einem Prototyp von "($$)" und XSUBs im Allgemeinen können jetzt als Sortierung verwendet werden
Unterprogramme. In beiden Fällen werden die beiden zu vergleichenden Elemente wie gewohnt übergeben
Parameter in @_. Siehe "Sortieren" in perlfunc.
Bei nicht prototypisierten Sortierunterprogrammen ist das historische Verhalten der Übergabe der zu
verglichen, da die globalen Variablen $a und $b unverändert bleiben.
"Sortieren $coderef @foo" erlaubt
Sortieren() hat eine Unterprogrammreferenz nicht als Vergleichsfunktion in früher akzeptiert
Versionen. Dies ist jetzt erlaubt.
Reichen Sie das Globbing umgesetzt innen
Perl verwendet jetzt die File::Glob-Implementierung des glob () Betreiber automatisch. Dies
vermeidet die Verwendung eines externen csh-Prozesses und die damit verbundenen Probleme.
HINWEIS: Dies ist derzeit eine experimentelle Funktion. Schnittstellen und
Ausführung können sich ändern.
Unterstützung für Check Blöcke
Neben "BEGIN", "INIT", "END", "DESTROY" und "AUTOLOAD" werden Unterprogramme namens "CHECK"
sind jetzt etwas Besonderes. Diese werden beim Übersetzen in die Warteschlange gestellt und verhalten sich ähnlich wie END-Bausteine,
außer dass sie am Ende der Kompilierung und nicht am Ende der Ausführung aufgerufen werden.
Sie können nicht direkt aufgerufen werden.
POSIX Charakter Klasse Syntax [: :] unterstützt
Um beispielsweise alphabetische Zeichen abzugleichen, verwenden Sie /[[:alpha:]]/. Siehe Perlre für Details.
Besser pseudozufällig Anzahl Generator
In 5.005_0x und früher, perl's rand () Funktion verwendet die C-Bibliothek and(3) Funktion. Wie
von 5.005_52, Tests konfigurieren für drand48(), zufällig () und rand () (in dieser Reihenfolge) und Picks
der erste, den es findet.
Diese Änderungen sollten zu besseren Zufallszahlen von führen rand ().
Verbesserte "qw//" Operator
Der Operator "qw//" wird jetzt zur Kompilierzeit zu einer wahren Liste ausgewertet, anstatt zu sein
durch einen Laufzeitaufruf von "split()" ersetzt. Dies beseitigt das verwirrende Fehlverhalten von
"qw//" im skalaren Kontext, der dieses Verhalten von geerbt hatte Teilt().
So:
$foo = ($bar) = qw(abc); drucke "$foo|$bar\n";
gibt jetzt "3|a" statt "2|a" korrekt aus.
Besser schlimmsten Fall Verhalten of Hashes
Kleine Änderungen im Hashing-Algorithmus wurden implementiert, um die
Verteilung von Bits niedrigerer Ordnung im Hash-Wert. Dies wird voraussichtlich bessere Ergebnisse liefern
Leistung auf Tasten, die wiederholte Sequenzen sind.
Pack() Format 'Z' unterstützt
Der neue Formattyp 'Z' ist nützlich zum Packen und Entpacken von nullterminierten Strings. Sehen
"pack" in perlfunc.
Pack() Format Modifikator '!' unterstützt
Der neue Formattyp-Modifikator '!' ist nützlich zum Ein- und Auspacken von nativen Shorts, Ints,
und sehnt. Siehe "Packen" in perlfunc.
Pack() und auspacken() Unterstützung gezählt Streicher
Das Vorlagenzeichen '/' kann verwendet werden, um einen zu packenden gezählten Stringtyp anzugeben oder
unverpackt. Siehe "Packen" in perlfunc.
Ihre Nachricht in Pack() Vorlagen
Das Zeichen '#' in einer Vorlage leitet einen Kommentar bis zum Zeilenende ein. Dies
erleichtert die Dokumentation von Pack() Templates.
Schwach Referenzen
In früheren Versionen von Perl konnten Sie Objekte nicht zwischenspeichern, damit sie gelöscht werden können
wenn die letzte Referenz von außerhalb des Caches gelöscht wird. Die Referenz im Cache wäre
Halten Sie einen Referenzzähler für das Objekt und die Objekte würden niemals zerstört.
Ein weiteres bekanntes Problem sind Zirkelverweise. Wenn ein Objekt auf sich selbst verweist,
sein Referenzzähler würde nie auf Null sinken und er würde nicht zerstört werden, bis die
Programm wird beendet.
Schwache Referenzen lösen dies, indem Sie jede Referenz "schwächen", dh sie nicht machen
zählen zum Referenzzähler. Wenn die letzte nicht schwache Referenz auf ein Objekt ist
gelöscht, das Objekt wird zerstört und alle schwachen Verweise auf das Objekt sind
automatisch undef-ed.
Um diese Funktion zu verwenden, benötigen Sie das Paket Devel::WeakRef von CPAN, das Folgendes enthält:
zusätzliche Dokumentation.
HINWEIS: Dies ist eine experimentelle Funktion. Einzelheiten können sich ändern.
Binär Zahlen unterstützt
Binärzahlen werden jetzt als Literale, in s?printf-Formaten und "oct()" unterstützt:
$antwort = 0b101010;
printf "Die Antwort ist: %b\n", oct("0b101010");
LWert Unterprogramme
Unterroutinen können jetzt veränderbare L-Werte zurückgeben. Siehe "Lvalue-Unterprogramme" in perlsub.
HINWEIS: Dies ist eine experimentelle Funktion. Einzelheiten können sich ändern.
Manche Pfeile Mai be ausgelassen in Anrufe - durch Konsolidierung, Referenzen
Perl erlaubt jetzt das Weglassen des Pfeils in vielen Konstrukten mit Unterprogrammaufrufen
durch Referenzen. Zum Beispiel kann jetzt "$foo[10]->('foo')" geschrieben werden
"$foo[10]('foo')". Dies ist ziemlich ähnlich, wie der Pfeil weggelassen werden kann
"$foo[10]->{'foo'}". Beachten Sie jedoch, dass der Pfeil weiterhin erforderlich ist für
"foo(10)->('Balken')".
Boolean Zuordnung durch sind legal lWerte
Konstrukte wie "($a ||= 2) += 1" sind jetzt erlaubt.
existiert () is unterstützt on Subroutine Namen
Die existiert () builtin funktioniert jetzt mit Subroutinennamen. Ein Unterprogramm gilt als vorhanden
wenn es deklariert wurde (auch wenn es implizit ist). Beispiele finden Sie unter "existiert" in perlfunc.
existiert () und löschen() sind unterstützt on Array Elemente
Die existiert () und löschen() Builtins funktionieren jetzt auch auf einfachen Arrays. Das Verhalten ist
ähnlich wie bei Hash-Elementen.
existiert () kann verwendet werden, um zu überprüfen, ob ein Array-Element initialisiert wurde. Dies vermeidet
nicht existierende Array-Elemente automatisch beleben. Wenn das Array gebunden ist, wird die EXISTIERT() Methode
im entsprechenden gebundenen Paket aufgerufen wird.
löschen() kann verwendet werden, um ein Element aus dem Array zu entfernen und zurückzugeben. Das Array-Element
an dieser Position kehrt er in seinen nicht initialisierten Zustand zurück, sodass das Testen auf dasselbe Element
mit existiert () wird false zurückgeben. Wenn das Element zufällig das ist, das am Ende steht,
Die Größe des Arrays schrumpft auch auf das höchste Element, das auf true getestet wird existiert () oder
0, wenn keine solche gefunden wird. Wenn das Array gebunden ist, wird die LÖSCHEN() Methode in der entsprechenden
gebundenes Paket aufgerufen wird.
Beispiele finden Sie unter "exists" in perlfunc und "delete" in perlfunc.
Pseudo-Hashes Arbeit leben
Dereferenzieren einiger Arten von Referenzwerten in einem Pseudo-Hash, z. B. "$ph->{foo}[1]",
wurde aus Versehen abgelehnt. Dies wurde korrigiert.
Bei Anwendung auf ein Pseudo-Hash-Element existiert () meldet nun ob der angegebene Wert
existiert, nicht nur, wenn der Schlüssel gültig ist.
löschen() arbeitet jetzt mit Pseudo-Hashes. Wenn ein Pseudo-Hash-Element oder -Slice angegeben wird, wird es gelöscht
die den Schlüsseln entsprechenden Werte (aber nicht die Schlüssel selbst). Siehe "Pseudo-Hashes:
Array als Hash verwenden" in perlref.
Pseudo-Hash-Slices mit konstanten Schlüsseln sind jetzt für Array-Lookups zur Kompilierzeit optimiert.
Listenzuweisungen zu Pseudo-Hash-Slices werden jetzt unterstützt.
Das Pragma "fields" bietet jetzt Möglichkeiten zum Erstellen von Pseudo-Hashes, über Felder::neu() und
Felder::phash(). Siehe Felder.
HINWEIS: Der Pseudo-Hash-Datentyp ist weiterhin experimentell.
Sich auf die Schnittstellenelemente beschränken, die von der . bereitgestellt werden
field-Pragma schützt vor zukünftigen Änderungen.
automatische Spülung of Möglichkeiten für das Ausgangssignal: Puffer
Gabel(), exec (), System(), qx// und pipe öffnen()s leert jetzt die Puffer aller geöffneten Dateien für
Ausgabe, wenn die Operation versucht wurde. Dadurch entfällt meist verwirrende Pufferung
Pannen von Benutzern, die nicht wissen, wie Perl intern mit I/O umgeht.
Dies wird auf einigen Plattformen wie Solaris nicht unterstützt, wenn ein entsprechend korrektes
Implementierung von fflush(NULL) ist nicht verfügbar.
Besser Diagnostik on bedeutungslos Dateihandle Geschäftstätigkeit
Konstrukte wie "open( )" und "schließen( )" sind Fehler bei der Kompilierung. Der Versuch,
Das Lesen von Dateihandles, die nur zum Schreiben geöffnet wurden, erzeugt jetzt Warnungen (genauso wie
Schreiben in schreibgeschützte Dateihandles tut dies).
COHO Expo bei der möglich, Gepuffert frustrierten verworfen von betrogen Varianten des Eingangssignals: Dateihandle
"open(NEW, "<&OLD")" versucht nun alle zuvor gelesenen Daten zu verwerfen und
in "OLD" gepuffert, bevor der Griff dupliziert wird. Auf Plattformen, auf denen dies erlaubt ist,
nächste Leseoperation auf "NEW" gibt dieselben Daten zurück wie die entsprechende Operation auf
"ALT". Früher hätte es die Daten vom Anfang der folgenden Platte zurückgegeben
stattdessen blockieren.
eof() hat die gleich alt Magie as <>
"eof()" würde true zurückgeben, wenn noch kein Versuch unternommen wurde, aus "<>" zu lesen. "eof()" hat
geändert wurde, um eine kleine Magie zu haben, öffnet es jetzt die "<>"-Dateien.
binmode() können. be benutzt zu kompensieren : crlf und :roh Modi
binmode() akzeptiert jetzt ein zweites Argument, das eine Disziplin für das Handle in . angibt
Frage. Die beiden Pseudo-Disziplinen ":raw" und ":crlf" werden derzeit auf DOS-
Derivate-Plattformen. Siehe "binmode" in perlfunc und öffnen.
"-T" Dateitest erkennt UTF-8 codiert Dateien as "text"
Der für den Dateitest "-T" verwendete Algorithmus wurde verbessert, um UTF-8 . korrekt zu identifizieren
Inhalt als "Text".
System(), Backticks und Rohr XNUMXh geöffnet jetzt an reflektieren exec () Fehler
Auf Unix und ähnlichen Plattformen System(), qx() und open(FOO, "cmd |") etc., sind implementiert
Gabel() und exec (). Wenn der Basiswert exec () schlägt fehl, frühere Versionen haben sich nicht gemeldet
den Fehler richtig, da die exec () war zufällig in einem anderen Prozess.
Der untergeordnete Prozess kommuniziert nun mit dem übergeordneten Prozess über den Fehler beim Starten des
externer Befehl, der es diesen Konstrukten ermöglicht, mit ihrem üblichen Fehlerwert zurückzukehren und
setze $!.
Verbesserte Diagnostik
Zeilennummern werden (unter den wahrscheinlichsten Umständen) während des globalen
Phase der Zerstörung.
Diagnosen, die von Code ausgegeben werden, der in anderen Threads als dem Hauptthread ausgeführt wird, sind jetzt
zusammen mit der Thread-ID.
Eingebettete Nullzeichen in der Diagnose werden jetzt tatsächlich angezeigt. Früher haben sie die gekürzt
Nachricht in früheren Versionen.
$foo::a und $foo::b sind jetzt nur dann von "möglichen Tippfehlern" ausgenommen, wenn Sortieren() is
im Paket "foo" angetroffen.
Beim Analysieren von Anführungszeichenkonstrukten werden nicht erkannte alphabetische Escapezeichen generiert, die jetzt a . generieren
Warnung, da sie in späteren Versionen von Perl möglicherweise eine neue Semantik annehmen.
Viele Diagnosen melden jetzt den internen Vorgang, bei dem die Warnung provoziert wurde, wie z
so:
Verwendung eines nicht initialisierten Werts in der Verkettung (.) in (eval 1) Zeile 1.
Verwendung eines nicht initialisierten Werts im Druck in (eval 1) Zeile 1.
Diagnosen, die innerhalb von eval auftreten, können auch die Datei- und Zeilennummer angeben, in der die
eval befindet sich neben der eval-Sequenznummer und der Zeilennummer innerhalb der
Text selbst ausgewertet. Beispielsweise:
Nicht genügend Argumente für Skalar bei (eval 4)[newlib/perl5db.pl:1411] Zeile 2, bei EOF
Diagnose folgen STDERR
Die Diagnoseausgabe geht jetzt stattdessen an die Datei, auf die das "STDERR"-Handle zeigt
immer zum "stderr" der zugrunde liegenden C-Laufzeitbibliothek zu gehen.
Mehr konsistent close-on-exec Verhalten
Auf Systemen, die ein close-on-exec-Flag auf Dateihandles unterstützen, ist das Flag jetzt für alle gesetzt
Griffe erstellt von Rohr(), Steckdosenpaar(), Socket () und accept (), wenn dies gerechtfertigt ist
der Wert von $^F, der möglicherweise gültig ist. Frühere Versionen haben es versäumt, das Flag für . zu setzen
Handles, die mit diesen Operatoren erstellt wurden. Siehe "pipe" in perlfunc, "socketpair" in perlfunc,
"socket" in perlfunc, "akzeptieren" in perlfunc und "$^F" in perlvar.
syswrite() Benutzerfreundlichkeit
Das Längenargument von "syswrite()" ist optional geworden.
Besser Syntax Schecks on eingeklammert einstellig durch
Ausdrücke wie:
Druck definiert(&foo,&bar,&baz);
print uc("foo","bar","baz");
undef($foo,&bar);
war in früheren Versionen versehentlich erlaubt und führte zu unvorhersehbarem Verhalten.
Einige erzeugten bei dieser Verwendung zusätzliche Warnungen; andere haben stillschweigend das falsch gemacht
Ding.
Die eingeklammerten Formen der meisten unären Operatoren, die ein einzelnes Argument erwarten, stellen jetzt sicher, dass
dass sie nicht mit mehr als einem Argument aufgerufen werden, was die oben gezeigten Fälle zur Syntax macht
Fehler. Das übliche Verhalten von:
Druck definiert &foo, &bar, &baz;
print uc "foo", "bar", "baz";
undef $foo, &bar;
bleibt unverändert. Siehe Perlop.
Bit durch Unterstützung voller nativen ganze Zahl Breite
Die Bitoperatoren (& | ^ ~ << >>) arbeiten jetzt mit der vollen nativen ganzzahligen Breite (der genauen
deren Größe in $Config{ivsize} verfügbar ist). Wenn Ihre Plattform beispielsweise entweder
nativ 64-Bit oder wenn Perl für die Verwendung von 64-Bit-Ganzzahlen konfiguriert wurde, diese Operationen
gelten für 8 Byte (im Gegensatz zu 4 Byte auf 32-Bit-Plattformen). Für die Portabilität, stellen Sie sicher, dass
Maskieren Sie die überschüssigen Bits im Ergebnis von unärem "~", zB "~$x & 0xffffffff".
Verbesserte Sicherheitdienst Funktionen
Potenziell unsicherere Operationen verfälschen ihre Ergebnisse für eine verbesserte Sicherheit.
Die Felder "passwd" und "shell", die von der . zurückgegeben werden getpwent(), getpwnam() und getpwuid() sind
jetzt verdorben, da der Benutzer sein eigenes verschlüsseltes Passwort und seine Login-Shell beeinflussen kann.
Die Variable modifiziert durch shmread(), und von . zurückgegebene Nachrichten msgrcv() (und sein Objekt-
orientierte Schnittstelle IPC::SysV::Msg::rcv) sind ebenfalls verdorben, da andere nicht vertrauenswürdige
Prozesse können Nachrichten und gemeinsam genutzte Speichersegmente für ihre eigenen schändlichen Zwecke modifizieren.
Mehr funktional bloßes Wort Prototyp (*)
Bareword-Prototypen wurden rationalisiert, damit sie zum Überschreiben von Builtins verwendet werden können
die Barewords akzeptieren und auf besondere Weise interpretieren, wie zum Beispiel „require“ oder „do“.
Als "*" prototypisierte Argumente werden jetzt innerhalb der Subroutine entweder als einfaches
Skalar oder als Verweis auf einen Typglob. Siehe "Prototypen" in perlsub.
"benötigen" und "tun" Mai be überschrieben
Die Operationen "require" und "do 'file'" können lokal überschrieben werden, indem Subroutinen von importiert werden
gleichen Namen in das aktuelle Paket (oder global durch Importieren in das
CORE::GLOBAL::-Namespace). Das Überschreiben von "erforderlich" wirkt sich auch auf "Verwendung" aus, sofern die
override ist zur Kompilierzeit sichtbar. Siehe "Eingebaute Funktionen überschreiben" in perlsub.
$^X Variablen Mai jetzt an haben Namen länger als dank One Charakter
Früher war $^X gleichbedeutend mit ${"\cX"}, aber $^XY war ein Syntaxfehler. Jetzt variabel
Namen, die mit einem Steuerzeichen beginnen, können beliebig lang sein. Allerdings für
Kompatibilitätsgründe, diese Variablen sollen mit expliziten Klammern geschrieben werden, als "${^XY}"
zum Beispiel. "${^XYZ}" ist gleichbedeutend mit ${"\cXYZ"}. Variablennamen mit mehr als einem
Steuerzeichen wie "${^XY^Z}" sind unzulässig.
Die alte Syntax hat sich nicht geändert. Wie zuvor kann `^X' entweder ein wörtliches Steuerelement-X . sein
Zeichen oder die zweistellige Zeichenfolge `caret' plus `X'. Wenn geschweifte Klammern weggelassen werden,
Der Variablenname endet nach dem Steuerzeichen. Somit ist "$^XYZ" weiterhin synonym
mit "$^X . "YZ"" wie zuvor.
Wie zuvor dürfen lexikalische Variablen keine Namen haben, die mit Steuerzeichen beginnen. Wie
Bisher müssen Variablen, deren Namen mit einem Steuerzeichen beginnen, immer in sein
Paket `main'. Alle diese Variablen sind für zukünftige Erweiterungen reserviert, mit Ausnahme derer, die
beginnen mit "^_", die von Benutzerprogrammen verwendet werden können und garantiert nicht erworben werden
besondere Bedeutung in jeder zukünftigen Version von Perl.
New Variable $^C spiegelt "-C" wechseln
$^C hat einen booleschen Wert, der angibt, ob Perl im Nur-Kompilierungsmodus ausgeführt wird (dh
über den Schalter "-c"). Da BEGIN-Blöcke unter solchen Bedingungen ausgeführt werden, ist dies
Variable ermöglicht Perl-Code zu bestimmen, ob Aktionen, die nur im Normalbetrieb sinnvoll sind
Laufen gewährleistet. Siehe Perlvar.
New Variable $^V enthält Perl Version as a Schnur
$^V enthält die Perl-Versionsnummer als String bestehend aus Zeichen, deren Ordnungszahlen
mit den Versionsnummern übereinstimmen, dh v5.6.0. Dies kann in Zeichenfolgenvergleichen verwendet werden.
Ein Beispiel finden Sie unter "Unterstützung für Zeichenfolgen, die als Ordinalvektoren dargestellt werden".
Optional Y2K Warnungen
Wenn Perl mit dem definierten cpp-Makro "PERL_Y2KWARN" erstellt wurde, gibt es optionale Warnungen aus
beim Verketten der Zahl 19 mit einer anderen Zahl.
Dieses Verhalten muss beim Ausführen von Configure speziell aktiviert werden. Sehen INSTALLIEREN und
README.Y2K.
Arrays jetzt an immer interpolieren in doppelt zitiert Streicher
In Strings in doppelten Anführungszeichen interpolieren Arrays jetzt, egal was passiert. Das Verhalten in früher
Versionen von Perl 5 war, dass Arrays in Strings interpolieren würden, wenn das Array gewesen wäre
erwähnt, bevor der String kompiliert wurde, andernfalls würde Perl eine fatale Kompilierungs-
Zeitfehler. In den Versionen 5.000 bis 5.003 war der Fehler
Das wörtliche @example erfordert jetzt einen umgekehrten Schrägstrich
In den Versionen 5.004_01 bis 5.6.0 war der Fehler
In String muss @example jetzt als \@example . geschrieben werden
Die Idee hier war, die Leute dazu zu bringen, "fred\@example.com" zu schreiben, wenn sie
wollte ein wörtliches "@"-Zeichen, so wie sie immer geschrieben haben "Gib mir meine \$5 zurück", wenn
sie wollten ein wörtliches "$"-Zeichen.
Ab 5.6.1, wenn Perl jetzt ein "@"-Zeichen in einer Zeichenfolge in doppelten Anführungszeichen sieht, ist es immer
versucht, ein Array zu interpolieren, unabhängig davon, ob das Array verwendet wurde oder nicht
bereits erklärt. Der schwerwiegende Fehler wurde auf eine optionale Warnung herabgestuft:
Mögliche unbeabsichtigte Interpolation von @example in string
Dies warnt Sie, dass "[E-Mail geschützt] " wird zu "fred.com", wenn Sie dies nicht tun
Backslash das "@". Sehen http://perl.plover.com/at-error.html für weitere Details über die
Geschichte hier.
@- und @+ die Anfang/Ende Versätze of Regex Streichhölzer
Die neuen magischen Variablen @- und @+ liefern die Anfangs- bzw. End-Offsets,
von $&, $1, $2 usw. Siehe perlvar für Details.
Module und Pragmatisch
Module
Attribute
Obwohl es intern von Perl als Pragma verwendet wird, bietet dieses Modul auch eine Möglichkeit zum Abrufen von
Unterprogramm- und Variablenattribute. Siehe Attribute.
B Die Perl Compiler Suite wurde für diese Version umfassend überarbeitet. Mehr davon
Standard-Perl-Testsuite besteht, wenn sie unter dem Compiler ausgeführt wird, aber es gibt immer noch eine
bedeutender Weg, um kompilierte ausführbare Dateien in Produktionsqualität zu erreichen.
HINWEIS: Die Compiler-Suite bleibt sehr experimentell. Der
generierter Code ist möglicherweise nicht korrekt, selbst wenn er ausgeführt werden kann
ohne fehler.
Benchmark
Insgesamt weisen die Benchmark-Ergebnisse einen geringeren durchschnittlichen Fehler und eine bessere Timing-Genauigkeit auf.
Sie können jetzt Tests für n Sekunden, anstatt die richtige Anzahl von Tests zu erraten
run: zB timethese(-5, ...) führt jeden Code für mindestens 5 CPU-Sekunden aus. Null als
die "Anzahl der Wiederholungen" bedeutet "für mindestens 3 CPU-Sekunden". Das Ausgabeformat hat
auch geändert. Beispielsweise:
Benchmark verwenden;$x=3;timethese(-5,{a=>sub{$x*$x},b=>sub{$x**2}})
wird jetzt so etwas ausgeben:
Benchmark: a, b, jeweils für mindestens 5 CPU-Sekunden laufen lassen...
a: 5 Wanduhr-Sekunden (5.77 usr + 0.00 sys = 5.77 CPU) @ 200551.91/s (n=1156516)
b: 4 Sekunden Wanduhr (5.00 usr + 0.02 sys = 5.02 CPU) @ 159605.18/s (n=800686)
Neue Funktionen: "jeweils für mindestens N CPU-Sekunden...", "Wallclock-Sekunden" und die "@
Operationen/CPU-Sekunde (n=Operationen)".
timethese() gibt jetzt eine Referenz auf einen Hash von Benchmark-Objekten zurück, die den Test enthalten
Ergebnisse, eingegeben auf die Namen der Tests.
timethis() gibt jetzt das Iterationsfeld im Benchmark-Ergebnisobjekt zurück anstelle von
0.
timethese(), timethis() und cmpthese() (siehe unten) kann auch ein Format annehmen
Spezifizierer von 'none', um die Ausgabe zu unterdrücken.
Eine neue Funktion zähle es() ist einfach so timeit() außer dass es eine ZEIT dauert statt
ein GRAF.
Eine neue Funktion cmpthese() druckt ein Diagramm, das die Ergebnisse jedes zurückgegebenen Tests vergleicht
von einem timethese() Anruf. Für jedes mögliche Testpaar wird die prozentuale Geschwindigkeit
Differenz (Iter/Sek oder Sekunden/Iter) wird angezeigt.
Weitere Einzelheiten finden Sie unter Benchmark.
ByteLoader
Der ByteLoader ist eine dedizierte Erweiterung zum Generieren und Ausführen von Perl-Bytecode. Sehen
ByteLoader.
konstante
Referenzen können jetzt verwendet werden.
Die neue Version erlaubt auch einen führenden Unterstrich in Konstantennamen, verbietet aber ein
doppelter führender Unterstrich (wie in "__LINE__"). Einige andere Namen sind nicht zulässig oder
vor denen gewarnt wurde, einschließlich BEGIN, END usw. Einige Namen, die in den Hauptbereich gezwungen wurden::
verwendet, um in einigen Fällen stillschweigend zu versagen; jetzt sind sie tödlich (außerhalb von main :) und an
optionale Warnung (innerhalb von main::). Die Fähigkeit zu erkennen, ob eine Konstante
mit einem bestimmten Namen gesetzt wurde, wurde hinzugefügt.
Siehe konstant.
Zaubernamen
Dieses Pragma implementiert das String-Escape "\N". Siehe Zeichennamen.
Daten::Kipper
Eine "Maxdepth"-Einstellung kann angegeben werden, um zu vermeiden, zu tief in tiefe Daten vorzudringen
Strukturen. Siehe Data::Dumper.
Die XSUB-Implementierung von Entsorgen() wird jetzt automatisch aufgerufen, wenn die Einstellung "Useqq"
ist nicht in Gebrauch.
Das Ausgeben von "qr//"-Objekten funktioniert ordnungsgemäß.
DB "DB" ist ein experimentelles Modul, das eine saubere Abstraktion für das Debugging von Perl bietet
API.
DB_Datei
DB_File kann jetzt mit Berkeley DB-Versionen 1, 2 oder 3 erstellt werden. Siehe
"ext/DB_Datei/Änderungen".
Entwicklung::DProf
Devel::DProf, ein Perl-Quellcode-Profiler wurde hinzugefügt. Siehe Devel::DProf und
dprofpp.
Entwickeln::Peek
Das Devel::Peek-Modul bietet Zugriff auf die interne Darstellung von Perl
Variablen und Daten. Es ist ein Daten-Debugging-Tool für den XS-Programmierer.
Dumpwert
Das Dumpvalue-Modul bietet Bildschirmkopien von Perl-Daten.
DynaLoader
DynaLoader unterstützt jetzt a dl_unload_file() Funktion auf Plattformen, die unterstützen
Entladen von gemeinsamen Objekten mit dlclose().
Perl kann optional auch veranlassen, alle gemeinsam genutzten Erweiterungsobjekte zu entladen, die von . geladen wurden
Perl. Um dies zu aktivieren, erstellen Sie Perl mit der Option Konfigurieren
"-Accflags=-DDL_UNLOAD_ALL_AT_EXIT". (Dies kann nützlich sein, wenn Sie Apache mit verwenden
mod_perl.)
Englisch
$PERL_VERSION steht jetzt für $^V (ein Zeichenfolgenwert) statt für $] (ein numerisches
Wert).
Env Env unterstützt jetzt den Zugriff auf Umgebungsvariablen wie PATH als Array-Variablen.
Fktl
Weitere Fcntl-Konstanten hinzugefügt: F_SETLK64, F_SETLKW64, O_LARGEFILE für große Datei (mehr
als 4 GB) Zugriff (HINWEIS: das O_LARGEFILE wird automatisch hinzugefügt zu sysopen() Flaggen, wenn
Unterstützung für große Dateien wurde wie standardmäßig konfiguriert), Free/Net/OpenBSD Locking
Verhaltensflags F_FLOCK, F_POSIX, Linux F_SHLCK und O_ACCMODE: die kombinierte Maske von
O_RDONLY, O_WRONLY und O_RDWR. Der suchen()/sysseek() Konstanten SEEK_SET, SEEK_CUR,
und SEEK_END sind über das Tag ":seek" verfügbar. Der chmod()/stat () S_IF*-Konstanten
und S_IS*-Funktionen stehen über das Tag ":mode" zur Verfügung.
Datei::Vergleichen
A vergleichen_text() Funktion wurde hinzugefügt, die benutzerdefinierte Vergleichsfunktionen ermöglicht.
Siehe Datei::Vergleichen.
Datei::Finden
File::Find funktioniert jetzt korrekt, wenn die gesucht() Funktion wird entweder automatisch geladen oder ist a
symbolischer Hinweis.
Ein Fehler, der dazu führte, dass File::Find den Überblick über das Arbeitsverzeichnis verlor, wenn Top-
Level-Verzeichnisse wurde behoben.
File::Find unterstützt jetzt auch mehrere andere Optionen, um sein Verhalten zu steuern. Es kann
Folge symbolischen Links, wenn die Option "folgen" angegeben ist. Aktivieren von "no_chdir"
Option lässt File::Find das Wechseln des aktuellen Verzeichnisses beim Gehen überspringen
Verzeichnisse. Das Flag "untaint" kann bei der Ausführung mit aktivierten Taint-Prüfungen nützlich sein.
Siehe Datei::Suchen.
Datei::Glob
Diese Erweiterung implementiert Dateiglobbing im BSD-Stil. Standardmäßig wird es auch verwendet
für die interne Umsetzung der glob () Operator. Siehe Datei::Glob.
Datei::Spec
Dem File::Spec-Modul wurden neue Methoden hinzugefügt: devnull() gibt den Namen von zurück
das Nullgerät (/dev/null unter Unix) und tmpdir() der Name des temporären Verzeichnisses
(normalerweise / Tmp unter Unix). Es gibt jetzt auch Methoden zum Umrechnen zwischen Absolut und
relative Dateinamen: abs2rel() und rel2abs(). Für Kompatibilität mit Betriebssystemen
die Datenträgernamen in Dateipfaden angeben, die Splitpath(), Splitdir() und catdir()
Methoden wurden hinzugefügt.
Datei::Spec::Funktionen
Das neue File::Spec::Functions-Modul bietet eine Funktionsschnittstelle zum File::Spec
Modul. Ermöglicht Kurzschrift
$fullname = catfile($dir1, $dir2, $file);
statt
$fullname = File::Spec->catfile($dir1, $dir2, $file);
Getopt::Lange
Getopt::Long-Lizenzierung wurde geändert, um die Perl Artistic License sowie die
GPL. Früher war es nur GPL, was nicht-GPL-Anwendungen im Weg stand, die wollten
Getopt::Long verwenden.
Getopt::Long fördert die Verwendung von Pod::Usage, um Hilfenachrichten zu erstellen. Beispielsweise:
benutze Getopt::Long;
Pod verwenden::Verwendung;
mein $mann = 0;
meine $hilfe = 0;
GetOptions('help|?' => \$help, man => \$man) oder Pod2Verwendung(2);
Pod2Verwendung(1) wenn $hilfe;
pod2usage(-exitstatus => 0, -verbose => 2) if $man;
__ENDE__
=head1 NAME
Beispiel - Verwenden von Getopt::Long und Pod::Usage
=head1 ZUSAMMENFASSUNG
Beispiel [Optionen] [Datei ...]
Option:
-Hilfe kurze Hilfenachricht
-Mann vollständige Dokumentation
=head1 OPTIONEN
=über 8
=Punkt B<-Hilfe>
Drucken Sie eine kurze Hilfenachricht und beenden Sie das Programm.
=item B<-man>
Druckt die Handbuchseite und wird beendet.
=zurück
=head1 BESCHREIBUNG
B wird die angegebene(n) Eingabedatei(en) lesen und etwas tun
nützlich mit ihrem Inhalt.
= schneiden
Weitere Informationen finden Sie unter Pod::Verwendung.
Ein Fehler, der verhinderte, dass der Nicht-Option-Rückruf <> als erster angegeben wurde
Argument wurde behoben.
Um die Zeichen < und > als Optionsstarter anzugeben, verwenden Sie ><. Beachten Sie jedoch, dass
Das Ändern von Optionsstartern ist stark veraltet.
IO schreibe () und syswrite() nimmt jetzt eine ein-Argument-Form des Anrufs an, z
Konsistenz mit Perls syswrite().
Sie können jetzt ein TCP-basiertes IO::Socket::INET erstellen, ohne einen Verbindungsversuch zu erzwingen.
Auf diese Weise können Sie seine Optionen konfigurieren (z. B. nicht blockierend) und dann anrufen
verbinden () manuell.
Ein Fehler, der das verhinderte IO::Socket::Protokoll() Accessor davon ab, das jemals zurückzugeben
korrekter Wert wurde korrigiert.
IO::Socket::connect verwendet jetzt nicht blockierende IO anstelle von Alarm() verbinden
Auszeiten.
IO::Socket::accept verwendet jetzt wählen() statt Alarm() um Auszeiten zu machen.
IO::Socket::INET->neu setzt jetzt $! bei Fehler richtig. $@ ist immer noch rückwärts eingestellt
Kompatibilität.
JPL Java Perl Lingo wird jetzt mit Perl vertrieben. Weitere Informationen finden Sie unter jpl/README.
lib "use lib" entfernt jetzt alle nachgestellten doppelten Einträge. "no lib" entfernt alle benannten
Einträge.
Math :: BigInt
Die bitweisen Operationen "<<", ">>", "&", "|" und "~" werden jetzt auf Bigints unterstützt.
Mathematik::Komplex
Die Accessor-Methoden Re, Im, arg, abs, rho und theta können nun auch als Mutatoren fungieren
(Zugriff $z->Betreff(), Mutator $z->Re(3)).
Die Klassenmethode "display_format" und die entsprechende Objektmethode
"display_format" kann jetzt nicht nur ein Argument akzeptieren, sondern auch a
Parameter-Hash. Erkannte Schlüssel eines Parameter-Hashs sind "style", was entspricht
der alte Fall mit einem Parameter und zwei neue Parameter: "format", was a . ist
printf ()-style-Format-String (standardmäßig "%.15g", Sie können zum
Standard, indem Sie die Formatzeichenfolge auf "undef" setzen, die für beide Teile eines Komplexes verwendet wird
Zahl und "polar_pretty_print" (standardmäßig true), die steuert, ob ein Versuch
soll versuchen, kleine Vielfache und rationale Zahlen von pi (2pi, pi/2) am zu erkennen
Argument (Winkel) einer polaren komplexen Zahl.
Die potenziell störende Änderung besteht darin, dass im Listenkontext jetzt beide Methoden Rückkehr die
Parameter Hash-, anstatt nur den Wert des Parameters "style".
Mathe::Trigger
Ein bisschen radiale Trigonometrie (zylindrisch und sphärisch), radiale Koordinate
Umrechnungen und die Großkreisentfernung wurden hinzugefügt.
Pod::Parser, Pod::InputObjects
Pod::Parser ist eine Basisklasse zum Parsen und Auswählen von Abschnitten der Pod-Dokumentation
aus einem Eingangsstrom. Dieses Modul kümmert sich um die Identifizierung von Pod-Absätzen und
Befehle in der Eingabe und übergibt die geparsten Absätze und Befehle an benutzerdefinierte
Methoden, die sie nach Belieben interpretieren oder übersetzen können.
Pod::InputObjects definiert einige Eingabeobjekte, die von Pod::Parser und für Fortgeschrittene benötigt werden
Benutzer von Pod::Parser, die mehr über einen Befehl als seinen Namen und Text benötigen.
Ab Version 5.6.0 von Perl ist Pod::Parser nun der offiziell sanktionierte "Basisparser".
code" wird von allen pod2xxx-Übersetzern empfohlen. Pod::Text (pod2text) und
Pod::Man (pod2man) wurde bereits für die Verwendung von Pod::Parser und Bemühungen um
convert Pod::HTML (pod2html) sind bereits im Gange. Bei Fragen oder Kommentaren
über Pod-Parsing und Übersetzungsprobleme und Dienstprogramme, verwenden Sie bitte die
[E-Mail geschützt] Mailingliste.
Weitere Informationen finden Sie unter Pod::Parser und Pod::InputObjects.
Pod::Checker, Podchecker
Dieses Dienstprogramm überprüft Pod-Dateien auf die korrekte Syntax gemäß perlpod. Klar
Fehler werden als solche gekennzeichnet, während Warnungen für Fehler ausgegeben werden, die
anmutig behandelt. Die Checkliste ist noch nicht vollständig. Siehe Pod::Checker.
Pod::ParseUtils, Pod::Find
Diese Module bieten eine Reihe von Gizmos, die hauptsächlich für Pod-Übersetzer nützlich sind.
Pod::Find durchsucht Verzeichnisstrukturen und gibt gefundene Pod-Dateien zusammen mit ihren . zurück
kanonische Namen (wie "File::Spec::Unix"). Pod::ParseUtils enthält Pod::Liste (sinnvoll
zum Speichern von Pod-Listeninformationen), Pod::Hyperlink (zum Parsen des Inhalts von "L<>"
Sequenzen) und Pod::Cache (zum Zwischenspeichern von Informationen über Pod-Dateien, zB Link-Knoten).
Pod::Select, Podselect
Pod::Select ist eine Unterklasse von Pod::Parser, die eine Funktion namens "podselect()"
um benutzerdefinierte Abschnitte der rohen Pod-Dokumentation aus einem Eingabestream herauszufiltern.
podselect ist ein Skript, das Zugriff auf Pod::Select from other scripts to be . bietet
als Filter verwendet. Siehe Pod::Select.
Pod::Nutzung, pod2usage
Pod::Usage bietet die Funktion "pod2usage()" um Nutzungsmeldungen für eine Perl . zu drucken
Skript basierend auf der eingebetteten Pod-Dokumentation. Der pod2usage() Funktion ist im Allgemeinen
nützlich für alle Skriptautoren, da sie damit eine einzige Quelle schreiben und verwalten können
(die Pods) für die Dokumentation, wodurch die Notwendigkeit entfällt, redundante zu erstellen und zu pflegen
Verwendungsnachrichtentext, der aus Informationen besteht, die sich bereits in den Pods befinden.
Es gibt auch ein pod2usage-Skript, das von anderen Arten von Skripten verwendet werden kann
Nutzungsmeldungen aus Pods drucken (auch für Nicht-Perl-Skripte mit eingebetteten Pods)
Kommentare).
Details und Beispiele finden Sie unter Pod::Usage.
Pod::Text und Pod::Man
Pod::Text wurde umgeschrieben, um Pod::Parser zu verwenden. Während pod2text() ist noch verfügbar
aus Gründen der Abwärtskompatibilität hat das Modul jetzt eine neue bevorzugte Schnittstelle. Sehen
Pod::Text für die Details. Das neue Pod::Text-Modul kann für Optimierungen leicht in Unterklassen unterteilt werden
zur Ausgabe und zwei solcher Unterklassen (Pod::Text::Termcap für fett und
Unterstreichen mit Termcap-Informationen und Pod::Text::Color für Markup mit ANSI-Farbe
Sequenzen) sind mittlerweile Standard.
pod2man wurde in ein Modul namens Pod::Man umgewandelt, das auch Pod::Parser verwendet. Im
Prozess, mehrere ausstehende Fehler im Zusammenhang mit Zitaten in Abschnittsüberschriften, Zitieren von
Code-Escapes und verschachtelte Listen wurden behoben. pod2man ist jetzt ein Wrapper-Skript
um dieses Modul.
SDBM_Datei
Diesem Modul wurde eine EXISTS-Methode hinzugefügt (und sdbm_exists() wurde hinzugefügt
die zugrunde liegende sdbm-Bibliothek), so dass man jetzt auf einen an SDBM_File gebundenen Hash und
erhalten Sie das richtige Ergebnis und keinen Laufzeitfehler.
Ein Fehler, der möglicherweise zu Datenverlust geführt hat, wenn mehr als ein Festplattenblock gelesen wird
aus der Datenbank in einem BRINGEN() wurde repariert.
Sys :: Syslog
Sys::Syslog verwendet jetzt XSUBs, um auf Einrichtungen von syslog.h zuzugreifen, sodass dies nicht mehr erforderlich ist
syslog.ph existiert.
Sys::Hostname
Sys::Hostname verwendet jetzt XSUBs, um die C-Bibliotheken aufzurufen gethostname () or dein Name() wenn sie
existieren.
Begriff::ANSIColor
Begriff::ANSIColor ist ein sehr einfaches Modul, um einen einfachen und lesbaren Zugriff auf die
ANSI-Farbe und hervorhebende Escape-Sequenzen, unterstützt von den meisten ANSI-Terminals
Emulatoren. Es ist jetzt standardmäßig enthalten.
Zeit::Lokal
Die Zeitlokal() und Zeit gm () Funktionen, die verwendet werden, um im Hintergrund falsche Ergebnisse zurückzugeben, wenn die
Das Datum lag außerhalb des ganzzahligen Bereichs der Maschine. Sie jetzt konsequent Krächzen() wenn die
Das Datum liegt in einem nicht unterstützten Bereich.
Win32
Der Fehlerrückgabewert im Listenkontext wurde für alle Funktionen geändert, die zurückgeben
eine Werteliste. Bisher haben diese Funktionen eine Liste mit einem einzelnen Element zurückgegeben
"undef", wenn ein Fehler aufgetreten ist. Diese Funktionen geben nun die leere Liste in diesen zurück
Situationen. Dies gilt für folgende Funktionen:
Win32::FsType
Win32::GetOSVersion
Die restlichen Funktionen bleiben unverändert und geben im Fehlerfall auch in weiterhin "undef" zurück
Kontext auflisten.
Die Funktion Win32::SetLastError(ERROR) wurde als Ergänzung zum
Win32::GetLastError() Funktion.
Das neue Win32::GetFullPathName(FILENAME) gibt den vollständigen absoluten Pfadnamen für
FILENAME im skalaren Kontext. Im Listenkontext gibt es eine Liste mit zwei Elementen zurück, die enthält
den vollqualifizierten Verzeichnisnamen und den Dateinamen. Siehe Win32.
XSLoader
Die XSLoader-Erweiterung ist eine einfachere Alternative zu DynaLoader. Siehe XSLoader.
DBM-Filter
Allen DBM-Modulen wurde eine neue Funktion namens "DBM-Filter" hinzugefügt - DB_File,
GDBM_File, NDBM_File, ODBM_File und SDBM_File. DBM-Filter fügen vier neue Methoden hinzu
jedes DBM-Modul:
filter_store_key
filter_store_value
filter_fetch_key
filter_fetch_value
Diese können verwendet werden, um Schlüssel-Wert-Paare zu filtern, bevor die Paare in den . geschrieben werden
Datenbank oder direkt nachdem sie aus der Datenbank gelesen wurden. Siehe perldbmfilter für weitere Informationen
Informationen.
Pragmatisch
"use attrs" ist jetzt obsolet und wird nur aus Gründen der Abwärtskompatibilität bereitgestellt. Es war schon
durch die Syntax "sub:attribute" ersetzt. Siehe "Subroutine-Attribute" in perlsub und
Attribute.
Lexikalische Warnungen Pragma, "Warnungen verwenden;", um optionale Warnungen zu steuern. Siehe perllexwarn.
"use filetest" um das Verhalten von Dateitests zu steuern ("-r" "-w" ...). Aktuell nur einer
Subpragma implementiert, "use filetest 'access';", das verwendet Zugang(2) oder gleichwertig zu
Berechtigungen prüfen statt verwenden Zustand(2) wie üblich. Dies ist in Dateisystemen von Bedeutung, in denen
es gibt ACLs (Access Control Lists): die Zustand(2) könnte lügen, aber Zugang(2) weiß es besser.
Das Pragma "open" kann verwendet werden, um Standarddisziplinen für Handle-Konstruktoren anzugeben (z
öffnen()) und für qx//. Die beiden Pseudo-Disziplinen ":raw" und ":crlf" sind derzeit
unterstützt auf DOS-abgeleiteten Plattformen (dh wo binmode kein No-Op ist). Siehe auch
"binmode() kann verwendet werden, um die Modi :crlf und :raw einzustellen".
Dienstprogramm Änderungen
dprofpp
"dprofpp" wird verwendet, um mit "Devel::DProf" generierte Profildaten anzuzeigen. Siehe dprofpp.
find2perl
Das Dienstprogramm "find2perl" verwendet jetzt die erweiterten Funktionen des File::Find-Moduls. Der
Die Optionen -depth und -follow werden unterstützt. Die Pod-Dokumentation ist auch in der
Skripte.
h2xs
Das Tool "h2xs" kann nun in Verbindung mit "C::Scan" (erhältlich bei CPAN) zu
Analysieren Sie automatisch reale Header-Dateien. Die Optionen "-M", "-a", "-k" und "-o" sind
neu.
perlcc
"perlcc" unterstützt jetzt die C- und Bytecode-Backends. Standardmäßig generiert es eine Ausgabe von
das einfache C-Backend und nicht das optimierte C-Backend.
Die Unterstützung für Nicht-Unix-Plattformen wurde verbessert.
perldoc
"perldoc" wurde überarbeitet, um mögliche Sicherheitslücken zu vermeiden. Es wird nicht standardmäßig lassen
selbst als Superuser ausgeführt werden, aber Sie können die -U schalten Sie um, um zu versuchen, es fallen zu lassen
Privilegien zuerst.
Die Perl Debugger
Viele Fehlerbehebungen und Verbesserungen wurden hinzugefügt perl5db.pl, dem Perl-Debugger. Die Hilfe
Dokumentation wurde neu geordnet. Zu den neuen Befehlen gehören "< ?", "> ?" und "{ ?" auflisten
aktuelle Aktionen, "man Dokumentseite" um Ihren Doc Viewer auf einem Perl-Docset auszuführen, und Unterstützung für
zitierten Optionen. Die Hilfeinformationen wurden neu angeordnet und sollten wieder sichtbar sein, wenn
du benutzt weniger als Ihr Pager. Eine ernsthafte Sicherheitslücke wurde gestopft – das sollten Sie
Entfernen Sie sofort alle älteren Versionen des Perl-Debuggers, wie sie zuvor installiert wurden
Releases, bis hin zu perl3, von Ihrem System, um nicht davon gebissen zu werden.
Verbesserte Dokumentation
Viele der plattformspezifischen README-Dateien sind jetzt Teil der Perl-Installation. Sehen
perl für die komplette Liste.
perlapi.pod
Die offizielle Liste der öffentlichen Perl-API-Funktionen.
perlboot.pod
Ein Tutorial für Anfänger in objektorientiertem Perl.
perlcompile.pod
Eine Einführung in die Verwendung der Perl Compiler Suite.
perldbmfilter.pod
Ein Howto-Dokument zur Verwendung der DBM-Filterfunktion.
perldebug.pod
Alle Materialien, die nichts mit der Ausführung des Perl-Debuggers zu tun haben, sowie alles, was auf der unteren Ebene geduldet ist
Details, die den Gelegenheitsbenutzer des Debuggers zu zerstören drohten, wurden von . verschoben
die alte Manpage zum nächsten Eintrag weiter unten.
perldebguts.pod
Diese neue Manpage enthält zu wenig Material, das nichts mit Perl . zu tun hat
Debugger, aber etwas verwandt mit dem Debuggen von Perl selbst. Es enthält auch etwas Arkanes
interne Details zur Funktionsweise des Debugging-Prozesses, die möglicherweise nur für . von Interesse sind
Entwickler von Perl-Debuggern.
perlfork.pod
Hinweise zum Gabel() Emulation, die derzeit für die Windows-Plattform verfügbar ist.
perlfilter.pod
Eine Einführung in das Schreiben von Perl-Quellfiltern.
perlhack.pod
Einige Richtlinien zum Hacken des Perl-Quellcodes.
perlintern.pod
Eine Liste interner Funktionen im Perl-Quellcode. (Liste ist derzeit leer.)
perllexwarn.pod
Einführung und Referenzinformationen zu Warnkategorien mit lexikalischem Geltungsbereich.
perlnummer.pod
Detaillierte Informationen zu Zahlen, wie sie in Perl dargestellt werden.
perlopentut.pod
Ein Tutorial zur Verwendung öffnen() effektiv.
perlrefftut.pod
Ein Tutorial, das die Grundlagen von Referenzen vorstellt.
perltootc.pod
Ein Tutorial zum Verwalten von Klassendaten für Objektmodule.
perltodo.pod
Diskussion der am häufigsten gewünschten Funktionen, die eines Tages in Perl unterstützt werden könnten.
perlunicode.pod
Eine Einführung in die Unicode-Unterstützungsfunktionen in Perl.
Leistung Verbesserungen
Einfacher Sortieren() mit automatisierten { $a <=> $b } und die Google Trends, Amazons Bestseller sind optimiert
Viele häufig Sortieren() Operationen mit einem einfachen Inline-Block sind jetzt für schnellere optimiert
Leistung.
Optimiert Zuordnungen zu lexikalisch Variablen
Bestimmte Operationen im RHS von Zuweisungsanweisungen wurden optimiert, um direkt zu setzen
die lexikalische Variable auf dem LHS, wodurch redundanter Kopieraufwand entfällt.
Schneller Subroutine Anrufe
Geringfügige Änderungen in der internen Verarbeitung von Unterprogrammaufrufen bieten geringfügige Verbesserungen
in der Leistung.
löschen(), jeder(), Werte () und Hash- Iteration sind beschleunigt
Die von . zurückgegebenen Hashwerte löschen(), jeder(), Werte () und Hashes in einem Listenkontext sind
die tatsächlichen Werte im Hash anstelle von Kopien. Dadurch wird deutlich besser
Leistung, da unnötiges Kopieren in den meisten Situationen vermieden wird.
Installation und Konfiguration Verbesserungen
-Dusefäden Mittel verbinden etwas anders sein kann oder ander sein wird
Das Flag -Dusethreads aktiviert jetzt die experimentelle interpreterbasierte Thread-Unterstützung durch
Ursprünglich. Um stattdessen den Geschmack experimenteller Threads aus 5.005 zu erhalten, müssen Sie
Führen Sie Configure mit "-Dusethreads -Duse5005threads" aus.
Ab v5.6.0 fehlt der Unterstützung für Interpreter-Threads immer noch eine Möglichkeit, neue Threads zu erstellen
von Perl (dh "use Thread;" funktioniert nicht mit Interpreter-Threads). "Verwenden Sie Thread;"
ist weiterhin verfügbar, wenn Sie die Option -Duse5005threads für Konfigurieren angeben, Fehler
und alles.
HINWEIS: Die Unterstützung für Threads ist weiterhin eine experimentelle Funktion.
Schnittstellen und Implementierung unterliegen plötzlichen und drastischen Veränderungen.
New Einrichtung Fahnen
Die folgenden neuen Flags können in der Configure-Befehlszeile aktiviert werden, indem Sie Configure ausführen
mit "-Dflag".
usemultiplizität
usethreads useithreads (neue Interpreter-Threads: noch keine Perl-API)
usethreads use5005threads (Threads wie sie in 5.005 waren)
use64bitint (entspricht dem jetzt veralteten 'use64bits')
nutze 64bitall
uselongdouble
mehrbits verwenden
Verwenden Sie große Dateien
usesocks (nur SOCKS v5 unterstützt)
Gewindegängigkeit und 64-Bit-Qualität jetzt an mehr gewagt
Die Konfigurationsoptionen, die die Verwendung von Threads und die Verwendung von 64-Bitness ermöglichen, sind jetzt mehr
gewagt in dem Sinne, dass sie keine explizite Liste bekannter Betriebssysteme mehr haben
Threads/64-Bit-Fähigkeiten. Mit anderen Worten: Wenn Ihr Betriebssystem über die notwendigen
APIs und Datentypen, Sie sollten einfach in der Lage sein, sie für Threads von . zu verwenden
Konfigurieren Sie -Dusethreads und für 64 Bit entweder explizit durch Configure -Duse64bitint oder
implizit, wenn Ihr System 64-Bit breite Datentypen hat. Siehe auch "64-Bit-Unterstützung".
lang Doppel
Einige Plattformen haben "Long Doubles", Gleitkommazahlen mit einer noch größeren Reichweite als
gewöhnliche "Doppelgänger". Um die Verwendung langer Doubles für Perls Skalare zu aktivieren, verwenden Sie -Duselongdouble.
-Dusemorebits
Sie können sowohl -Duse64bitint als auch -Duselongdouble mit -Dusemorebits aktivieren. Siehe auch
"64-Bit-Unterstützung".
-Duselargefiles
Einige Plattformen unterstützen System-APIs, die große Dateien verarbeiten können (normalerweise
Dateien größer als zwei Gigabyte). Perl wird versuchen, diese APIs zu verwenden, wenn Sie danach fragen
-Duselargefiles.
Weitere Informationen finden Sie unter "Unterstützung großer Dateien".
installusrbinperl
Sie können "Configure -Uinstallusrbinperl" verwenden, wodurch installperl die Installation überspringt
perl auch als /usr/bin/perl. Dies ist nützlich, wenn Sie es vorziehen, nicht zu ändern / usr / bin für einige
Grund oder ein anderer, aber schädlich, weil viele Skripte davon ausgehen, Perl in /usr/bin/perl zu finden.
SOCKS Unterstützung
Sie können "Configure -Dusesocks" verwenden, wodurch Perl nach dem SOCKS-Proxy-Protokoll sucht
Bibliothek (v5, nicht v4). Weitere Informationen zu SOCKEN finden Sie unter:
http://www.socks.nec.com/
"-EIN" Flagge
Sie können die Configure-Variablen mit dem Configure-Schalter "-A" "nachbearbeiten". Die Bearbeitung
passiert unmittelbar nachdem die plattformspezifischen Hinweisdateien verarbeitet wurden, aber vorher
der eigentliche Konfigurationsprozess beginnt. Führen Sie "Configure -h" aus, um das vollständige "-A" herauszufinden
Syntax.
Verbesserte Installation Verzeichnisse
Die Installationsstruktur wurde bereichert, um die Unterstützung für die Wartung zu verbessern
mehrere Versionen von Perl, um Speicherorte für vom Anbieter bereitgestellte Module, Skripte und . bereitzustellen
Manpages und um die Wartung lokal hinzugefügter Module, Skripte und Manpages zu vereinfachen. Sehen
Ausführliche Informationen finden Sie im Abschnitt über Installationsverzeichnisse in der INSTALL-Datei. Für
die meisten Benutzer, die aus dem Quellcode erstellen und installieren, sollten die Standardeinstellungen in Ordnung sein.
Wenn Sie zuvor "Configure -Dsitelib" oder "-Dsitearch" verwendet haben, um spezielle Werte für
Bibliotheksverzeichnisse, möchten Sie vielleicht die neue Einstellung "-Dsiteprefix" verwenden
stattdessen. Wenn Sie eine config.sh-Datei aus einer früheren Version von Perl wiederverwenden möchten,
Sie sollten sicherstellen, dass Configure für die neuen Verzeichnisse sinnvolle Entscheidungen trifft.
Vollständige Details finden Sie unter INSTALLIEREN.
Plattform spezifisch Änderungen
Unterstützte Plattformen
· Die Mach CThreads (NEXTSTEP, OPENSTEP) werden jetzt von der Thread-Erweiterung unterstützt.
· GNU/Hurd wird jetzt unterstützt.
· Rhapsody/Darwin wird jetzt unterstützt.
· EPOC wird jetzt unterstützt (auf Psion 5).
· Der Cygwin-Port (ehemals cygwin32) wurde stark verbessert.
DOS
· Perl arbeitet jetzt mit djgpp 2.02 (und 2.03 alpha).
· Namen von Umgebungsvariablen werden nicht mehr in Großbuchstaben umgewandelt.
· Falsche Exit-Codes von Backticks wurden behoben.
· Dieser Port verwendet weiterhin sein eigenes eingebautes Globbing (nicht File::Glob).
OS390 (OpenEdition MVS)
Die Unterstützung für diese EBCDIC-Plattform wurde in dieser Version nicht verlängert. Es gibt
Schwierigkeiten bei der Abstimmung der Perl-Standardisierung auf UTF-8 als seine interne Darstellung
für Zeichen mit dem EBCDIC-Zeichensatz, da die beiden nicht kompatibel sind.
Es ist unklar, ob zukünftige Versionen die Unterstützung für diese Plattform erneuern werden, aber die
Möglichkeit besteht.
VMS
Zahlreiche Überarbeitungen und Erweiterungen bei Konfiguration, Build, Test und Installation
Prozess, um Kernänderungen und VMS-spezifische Optionen zu berücksichtigen.
Erweitern Sie den %ENV-Verarbeitungscode, um die Laufzeitzuordnung zu logischen Namen, CLI-Symbolen und CRTL . zu ermöglichen
Umgebungs-Array.
Erweiterung des Aufrufcodes von Unterprozessen, um Dateispezifikationen als Befehls-"Verben" zu akzeptieren.
Fügen Sie der Perl-Befehlszeilenverarbeitung die Fähigkeit hinzu, Standarddateitypen zu verwenden und zu erkennen
Unix-Stil "2>&1".
Erweiterung der File::Spec::VMS-Routinen und Integration in ExtUtils::MM_VMS.
Erweiterung von ExtUtils::MM_VMS um komplexe Erweiterungen flexibler zu handhaben.
Barewords am Anfang von Unix-Syntaxpfaden können als Text und nicht nur als logisch behandelt werden
Namen.
Optional sichere Übersetzung mehrerer logischer Namen, die intern von Perl verwendet werden.
Diverse Bugfixing und Portierung von neuem Core Code auf VMS.
Vielen Dank an die vielen Leute, die VMS-Patches, Tests,
und Ideen.
Win32
Perl kann jetzt emulieren Gabel() intern mit mehreren Interpretern, die in unterschiedlichen laufen
gleichzeitige Threads. Diese Unterstützung muss zur Build-Zeit aktiviert werden. Siehe Perlfork für
genaue Information.
Wenn ein Pfadname angegeben wird, der nur aus einem Laufwerksnamen besteht, z. B. "A:", opendir () und
stat () Verwenden Sie jetzt das aktuelle Arbeitsverzeichnis für das Laufwerk und nicht das Stammverzeichnis des Laufwerks.
Die eingebauten XSUB-Funktionen im Win32::-Namespace sind dokumentiert. Siehe Win32.
$^X enthält jetzt den vollständigen Pfadnamen der laufenden ausführbaren Datei.
A Win32::GetLongPathName() Funktion wird zur Ergänzung bereitgestellt Win32::GetFullPathName() und
Win32::GetShortPathName(). Siehe Win32.
POSIX::uname() wird unterstützt.
system(1,...) gibt jetzt echte Prozess-IDs statt Prozess-Handles zurück. töten() akzeptiert
jede reale Prozess-ID, anstatt ausschließlich Werte von system(1,...) zurückzugeben.
Zur besseren Kompatibilität mit Unix kann jetzt mit "kill(0, $pid)" getestet werden, ob a
Prozess existiert.
Das Modul "Shell" wird unterstützt.
Es wurde eine bessere Unterstützung für das Erstellen von Perl unter command.com in Windows 95 hinzugefügt.
Skripte werden standardmäßig im Binärmodus gelesen, um ByteLoader (und den Filtermechanismus) zuzulassen
im Allgemeinen), um richtig zu funktionieren. Aus Kompatibilitätsgründen wird das Dateihandle DATA auf Text gesetzt
Modus, wenn am Ende der Zeile mit dem __END__ oder . ein Wagenrücklauf erkannt wird
__DATA__-Token; andernfalls bleibt das DATA-Dateihandle im Binärmodus geöffnet. Vorhin
Versionen öffneten das Dateihandle DATA immer im Textmodus.
Die glob () Operator wird über die Erweiterung "File::Glob" implementiert, die glob . unterstützt
Syntax der C-Shell. Dies erhöht die Flexibilität der glob () Betreiber, aber da
können Kompatibilitätsprobleme für Programme sein, die auf der älteren Globbing-Syntax beruhten. wenn du
Wenn Sie die Kompatibilität mit der älteren Syntax beibehalten möchten, möchten Sie möglicherweise Perl mit ausführen
"-MDatei::DosGlob". Einzelheiten und Kompatibilitätsinformationen finden Sie unter File::Glob.
Signifikant Fehler Fixes
on leer Dateien
Wenn $/ auf "undef" gesetzt ist, gibt "slurping" eine leere Datei eine Zeichenfolge der Länge Null zurück (stattdessen
von "undef", wie früher) beim ersten Lesen von HANDLE, nachdem $/ auf "undef" gesetzt wurde.
Weiterlesen ergibt "undef".
Dies bedeutet, dass das Folgende "foo" an eine leere Datei anhängt (früher hat es nichts getan):
perl -0777 -pi -e 's/^/foo/' empty_file
Das Verhalten von:
perl -pi -e 's/^/foo/' empty_file
unverändert ist (die Datei bleibt weiterhin leer).
"eval '...'" Verbesserungen
Zeilennummern (wie durch . widergespiegelt Anrufer() und die meisten Diagnosen) innerhalb von "eval '...'" waren
oft falsch, wo es um Dokumente ging. Dies wurde korrigiert.
Lexikalische Suche nach Variablen, die in "eval '...'" in Funktionen vorkommen, die
selbst in einem "eval '...'" genannt, suchten an der falschen Stelle nach Lexika. Der
Die lexikalische Suche endet nun korrekt an der Blockgrenze des Unterprogramms.
Die Verwendung von "return" in "eval {...}" führte dazu, dass $@ nicht korrekt zurückgesetzt wurde, wenn nein
Ausnahme trat innerhalb der Auswertung auf. Dies wurde behoben.
Das Parsen von Here-Dokumenten war früher fehlerhaft, als sie als Ersatz erschienen
Ausdruck in "eval 's/.../.../e'". Dies wurde behoben.
Alle Zusammenstellung Fehler sind was immer dies auch sein sollte. Fehler
Einige "Fehler", die während der Kompilierung aufgetreten sind, wurden zwangsläufig generiert, als Warnungen folgten
durch eventuelle Beendigung des Programms. Dadurch konnten mehr solcher Fehler in a . gemeldet werden
einzelnen Durchlauf, anstatt beim ersten aufgetretenen Fehler einen harten Stopp zu verursachen.
Der Mechanismus zum Melden solcher Fehler wurde zur Warteschlangenkompilierungszeit neu implementiert
Fehler und melden Sie diese am Ende der Kompilierung als echte Fehler und nicht als
Warnungen. Dies behebt Fälle, in denen Fehlermeldungen in Form von Warnungen durchgesickert sind
wenn Code zur Laufzeit mit "eval STRING" kompiliert wurde und auch solche Fehler erlaubt
zuverlässig gefangen mit "eval "..."".
Implizit geschlossen Dateihandles sind Sicherheit
Manchmal implizit geschlossene Dateihandles (z. B. wenn sie lokalisiert sind und Perl
schließt sie beim Verlassen des Geltungsbereichs automatisch) könnte versehentlich $? oder $!. Dies
wurde korrigiert.
Verhalten of Liste Scheiben is mehr konsistent
Wenn Sie ein Stück einer wörtlichen Liste nehmen (im Gegensatz zu einem Stück eines Arrays oder Hashs), wird Perl
Wird verwendet, um eine leere Liste zurückzugeben, wenn das Ergebnis zufällig aus allen undef-Werten besteht.
Das neue Verhalten besteht darin, eine leere Liste zu erzeugen, wenn (und nur wenn) die ursprüngliche Liste leer war.
Betrachten Sie das folgende Beispiel:
@a = (1,undef,undef,2)[2,1,2];
Das alte Verhalten hätte dazu geführt, dass @a keine Elemente enthält. Das neue Verhalten sorgt dafür
es hat drei undefinierte Elemente.
Beachten Sie insbesondere, dass das Verhalten von Slices in den folgenden Fällen unverändert bleibt:
@a = ()[1,2];
@a = (getpwent)[7,0];
@a = (alles_returning_empty_list())[2,1,2];
@a = @b[2,1,2];
@a = @c{'a','b','c'};
Siehe Perldaten.
"(\$)" Prototyp und $foo{a}
Ein skalarer Referenzprototyp lässt nun korrekt ein Hash- oder Array-Element in diesem Slot zu.
"gehe zu &sub" und AUTOM. LADEN
Das Konstrukt "goto &sub" funktioniert korrekt, wenn &sub automatisch geladen wird.
"-Bareword" erlaubt für "verwenden ganze Zahl"
Das automatische Angeben von Barewords mit vorangestelltem "-" funktionierte in früheren Versionen nicht, wenn die
Das Pragma "integer" wurde aktiviert. Dies wurde behoben.
Fehler in ZERSTÖREN()
Wenn Code in einem Destruktor eine Ausnahme auslöste, wurde dies in früheren Versionen von . nicht bemerkt
Perl, es sei denn, jemand sucht in $@ direkt nach dem Punkt, an dem der Destruktor
zufällig gelaufen. Solche Fehler werden jetzt als Warnungen angezeigt, wenn Warnungen aktiviert sind.
Schauplatz Bugs fixiert
printf () und sprintf() Setzen Sie das numerische Gebietsschema zuvor auf das Standardgebietsschema "C" zurück.
Dies wurde behoben.
Zahlen, die gemäß dem lokalen numerischen Gebietsschema formatiert sind (z. B. mit einem Dezimalkomma
anstelle eines Dezimalpunkts) verursachte "ist nicht numerisch"-Warnungen, selbst während der Operationen
der Zugriff auf diese Zahlen führte zu korrekten Ergebnissen. Diese Warnungen wurden eingestellt.
Memory Lecks
Das Konstrukt "eval 'return sub {...}'" kann manchmal Speicherverluste verursachen. Dies wurde behoben.
Operationen, die keine Dateihandle-Konstruktoren sind, die verwendet werden, um Speicher zu verlieren, wenn sie auf ungültigen verwendet werden
Dateihandles. Dies wurde behoben.
Konstrukte, die @_ modifiziert haben, können die Werte in @_ möglicherweise nicht aufheben und somit Speicher verlieren.
Dies wurde korrigiert.
Falsch Subroutine Stummel nachdem gescheitert Subroutine Anrufe
Perl konnte manchmal leere Subroutinen-Stubs erstellen, wenn eine Subroutine in der
Paket. Solche Fälle hinderten spätere Methodensuchen daran, in Basispakete fortzuschreiten.
Dies wurde korrigiert.
Verderben Ausfälle für "-U"
Im unsicheren Modus können Taint-Verstöße manchmal zu stillen Fehlern führen. Dies
wurde repariert.
ENDE Blöcke und die "-C" wechseln
Frühere Versionen zum Ausführen von BEGIN und END blockiert, wenn Perl im Nur-Kompilier-Modus ausgeführt wurde.
Da dies typischerweise nicht das erwartete Verhalten ist, werden END-Blöcke nicht mehr ausgeführt
wenn der Schalter "-c" verwendet wird oder die Kompilierung fehlschlägt.
Siehe "Unterstützung für CHECK-Blöcke", um zu erfahren, wie Dinge ausgeführt werden, wenn die Kompilierphase endet.
unsere digitalen Möglichkeiten zu Leck DATEN Dateihandles
Durch die Verwendung des Tokens "__DATA__" wird ein implizites Dateihandle für die Datei erstellt, die die
Zeichen. Es liegt in der Verantwortung des Programms, es zu schließen, wenn es mit dem Lesen fertig ist.
Dieser Vorbehalt wird jetzt in der Dokumentation besser erklärt. Siehe Perldaten.
New or Geändert Diagnose
"%s"-Variable %s maskiert frühere Deklaration im gleichen %s
(W misc) Eine "my"- oder "unser"-Variable wurde im aktuellen Gültigkeitsbereich neu deklariert oder
-Anweisung, wodurch jeder Zugriff auf die vorherige Instanz effektiv eliminiert wird. Das ist
fast immer ein Schreibfehler. Beachten Sie, dass die frühere Variable weiterhin vorhanden ist
bis zum Ende des Geltungsbereichs oder bis alle Abschlussreferenzen darauf vernichtet sind.
"mein sub" noch nicht implementiert
(F) Unterroutinen mit lexikalischem Geltungsbereich sind noch nicht implementiert. Versuchen Sie das noch nicht.
"unsere" Variable %s neu deklariert
(W misc) Du scheinst das gleiche Global schon einmal im Strom deklariert zu haben
lexikalischer Geltungsbereich.
'!' nur erlaubt nach Typen %s
(F) Das '!' ist erlaubt in Pack() und auspacken() erst nach bestimmten Typen. Siehe "Packen" in
perlfunc.
Ich kann nicht zählen
(F) Sie hatten eine Entpack-Vorlage, die einen String mit gezählter Länge angibt, aber Sie haben auch
eine explizite Größe für die Zeichenfolge angegeben. Siehe "Packen" in perlfunc.
/ muss von a, A oder Z folgen
(F) Sie hatten eine Entpack-Vorlage, die einen String mit gezählter Länge angibt, der sein muss
gefolgt von einem der Buchstaben a, A oder Z, um anzugeben, welche Art von Zeichenfolge sein soll
unverpackt. Siehe "Packen" in perlfunc.
/ muss von a*, A* oder Z* folgen
(F) Sie hatten eine Packungsvorlage, die eine Zeichenfolge mit gezählter Länge angibt, derzeit die einzige
Dinge, deren Länge gezählt werden kann, sind a*, A* oder Z*. Siehe "Packen" in perlfunc.
/ muss einem numerischen Typ folgen
(F) Sie hatten eine Entpack-Vorlage, die ein '#' enthielt, aber dies folgte nicht einigen
numerische Entpackspezifikation. Siehe "Packen" in perlfunc.
/%s/: Unerkanntes Escape \\%c wurde durchlaufen
(W regexp) Sie haben eine Backslash-Zeichen-Kombination verwendet, die von Perl nicht erkannt wird.
Diese Kombination erscheint in einer interpolierten Variablen oder einem durch "'" getrennten Regular
Ausdruck. Der Charakter wurde wörtlich verstanden.
/%s/: Unerkanntes Escape \\%c in Zeichenklasse übergeben
(W regexp) Sie haben eine Backslash-Zeichen-Kombination verwendet, die von Perl nicht erkannt wird
innerhalb von Charakterklassen. Der Charakter wurde wörtlich verstanden.
/%s/ sollte wahrscheinlich als "%s" geschrieben werden
(W-Syntax) Sie haben ein Muster verwendet, bei dem Perl erwartete, einen String zu finden, wie in der
erstes Argument zum "beitreten". Perl behandelt das wahre oder falsche Ergebnis der Übereinstimmung mit den
Muster gegen $_ als String, was wahrscheinlich nicht das ist, was Sie im Sinn hatten.
%s() wurde zu früh aufgerufen, um den Prototyp zu überprüfen
(W-Prototyp) Sie haben eine Funktion aufgerufen, die einen Prototyp hat, bevor der Parser a . sah
Definition oder Deklaration dafür, und Perl konnte nicht überprüfen, ob der Aufruf konform ist
der Prototyp. Sie müssen entweder eine frühe Prototyp-Deklaration für die
fragliches Unterprogramm, oder verschieben Sie die Unterprogrammdefinition vor den Aufruf, um get
richtige Prototypenprüfung. Alternativ, wenn Sie sicher sind, dass Sie die . anrufen
korrekt funktionieren, können Sie ein kaufmännisches Und vor den Namen setzen, um die Warnung zu vermeiden.
Siehe perlsub.
%s Argument ist kein HASH- oder ARRAY-Element
(F) Das Argument zu existiert () muss ein Hash- oder Array-Element sein, wie zum Beispiel:
$foo{$bar}
$ref->{"susie"}[12]
%s Argument ist kein HASH- oder ARRAY-Element oder Slice
(F) Das Argument zu löschen() muss entweder ein Hash- oder Array-Element sein, wie zum Beispiel:
$foo{$bar}
$ref->{"susie"}[12]
oder ein Hash- oder Array-Slice, wie zum Beispiel:
@foo[$bar, $baz, $xyzzy]
@{$ref->[12]}{"susie", "queue"}
%s Argument ist kein Unterprogrammname
(F) Das Argument zu existiert () für "existiert &sub" muss ein Unterprogrammname sein und kein a
Unterprogrammaufruf. "exists &sub()" erzeugt diesen Fehler.
%s Paketattribut kann mit dem zukünftigen reservierten Wort kollidieren: %s
(W reserviert) Es wurde ein Attributname in Kleinbuchstaben verwendet, der einen paketspezifischen Handler hatte.
Dieser Name könnte eines Tages für Perl selbst eine Bedeutung haben, auch wenn dies noch nicht der Fall ist.
Vielleicht sollten Sie stattdessen einen Attributnamen mit gemischter Groß-/Kleinschreibung verwenden. Siehe Attribute.
(in Bereinigung) %s
(W misc) Dieses Präfix zeigt normalerweise an, dass a ZERSTÖREN() Methode hat das Angezeigte ausgelöst
Ausnahme. Da Destruktoren normalerweise vom System an beliebigen Punkten aufgerufen werden
während der Ausführung und oft sehr oft wird die Warnung nur einmal ausgegeben
für eine beliebige Anzahl von Fehlern, die andernfalls dazu führen würden, dass dieselbe Nachricht angezeigt wird
wiederholt.
Das Fehlschlagen von Benutzerrückrufen, die mit dem Flag "G_KEEPERR" gesendet werden, kann auch zu
diese Warnung. Siehe "G_KEEPERR" in perlcall.
<> sollten Anführungszeichen sein
(F) Du hast geschrieben "erforderlich " wenn Sie "require 'file'" hätten schreiben sollen.
Versuchen Sie, sich selbst anzuschließen
(F) Sie haben versucht, einen Thread aus sich heraus zu verbinden, was eine unmögliche Aufgabe ist. Sie
vielleicht steigst du in den falschen Thread ein, oder du musst das verschieben beitreten() zu einem anderen
Faden.
Schlecht bewertetes Substitutionsmuster
(F) Sie haben den Schalter /e verwendet, um die Ersetzung einer Substitution auszuwerten, aber perl
einen Syntaxfehler im auszuwertenden Code gefunden, höchstwahrscheinlich eine unerwartete rechte Klammer
'}'.
Badewanne realloc() ignoriert
(S) Eine interne Routine namens realloc() auf etwas, das es noch nie gegeben hat malloc ()ed
an erster Stelle. Obligatorisch, kann aber durch Setzen der Umgebungsvariable deaktiviert werden
"PERL_BADFREE" auf 1.
Bareword in Bedingung gefunden
(W Bareword) Der Compiler hat ein Bareword gefunden, wo er eine Bedingung erwartete, die
zeigt oft an, dass ein || oder && wurde als Teil des letzten Arguments von geparst
vorheriges Konstrukt, zum Beispiel:
FOO öffnen || sterben;
Es kann auch auf eine falsch geschriebene Konstante hinweisen, die als Bareword interpretiert wurde:
Konstante TYPO verwenden => 1;
if (TYOP) { print "foo" }
Das "strenge" Pragma ist nützlich, um solche Fehler zu vermeiden.
Binärzahl > 0b11111111111111111111111111111111 nicht tragbar
(W portabel) Die von Ihnen angegebene Binärzahl ist größer als 2**32-1 (4294967295) und
daher nicht portabel zwischen Systemen. Weitere Informationen zur Portabilität finden Sie unter Perlport
Bedenken.
Bitvektorgröße > 32 nicht portabel
(W portabel) Die Verwendung von Bitvektorgrößen von mehr als 32 ist nicht portabel.
Pufferüberlauf in prime_env_iter: %s
(W intern) Eine VMS-spezifische Warnung. Während Perl sich auf die Iteration vorbereitete
%ENV, es wurde ein zu langer logischer Name oder eine zu lange Symboldefinition gefunden
auf die angezeigte Zeichenfolge abgeschnitten.
Dateisystem des Skripts "%s" kann nicht überprüft werden
(P) Aus irgendeinem Grund können Sie das Dateisystem des Skripts nicht auf nosuid überprüfen.
Klasse kann nicht für nicht-skalare %s in "%s" deklariert werden
(S) Derzeit können nur skalare Variablen mit einem bestimmten Klassenqualifizierer in a . deklariert werden
"meine" oder "unsere" Erklärung. Die Semantik kann für andere Variablentypen erweitert werden
in der Zukunft.
Kann %s nicht in "%s" deklarieren
(F) Nur Skalar-, Array- und Hash-Variablen dürfen als "meine" oder "unsere" Variablen deklariert werden.
Sie müssen gewöhnliche Bezeichner als Namen haben.
Kann das Signal CHLD nicht ignorieren, erzwingt die Standardeinstellung
(W-Signal) Perl hat erkannt, dass es mit dem SIGCHLD-Signal ausgeführt wird (manchmal
bekannt als SIGCLD) deaktiviert. Da das Deaktivieren dieses Signals die ordnungsgemäße Funktion beeinträchtigt
Bestimmung des Exit-Status von Kindprozessen hat Perl das Signal auf seinen
Standardwert. Diese Situation weist normalerweise darauf hin, dass das übergeordnete Programm, unter dem
Perl kann laufen (zB cron) ist sehr nachlässig.
Kann Nicht-Lvalue-Unterroutinenaufruf nicht ändern
(F) Unterprogramme, die im lvalue-Kontext verwendet werden sollen, sollten als solche deklariert werden, siehe
"Lvalue-Unterprogramme" in perlsub.
Kann CRTL-Umgebung nicht lesen
(S) Eine Warnung speziell für VMS. Perl hat versucht, ein Element von %ENV aus den CRTLs zu lesen
internes Umgebungs-Array und erkannte, dass das Array fehlte. Du musst rechnen
heraus, wo Ihre CRTL ihre Umgebung verlegt oder definiert hat PERL_ENV_TABLES (siehe perlvms) so
diese Umgebung wird nicht durchsucht.
Kann %s nicht entfernen: %s, Datei wird übersprungen
(S) Sie haben eine Inplace-Bearbeitung angefordert, ohne eine Sicherungsdatei zu erstellen. Perl war nicht in der Lage
Entfernen Sie die Originaldatei, um sie durch die geänderte Datei zu ersetzen. Die Datei wurde verlassen
unverändert.
Kann %s von der Lvalue-Unterroutine nicht zurückgeben
(F) Perl hat einen Versuch erkannt, ungültige lvalues zurückzugeben (wie temporäre oder readonly
Werte) aus einem Unterprogramm, das als L-Wert verwendet wird. Das ist nicht erlaubt.
Kann eine Nichtreferenz nicht schwächen
(F) Sie haben versucht, etwas zu schwächen, das keine Referenz war. Nur Referenzen können
geschwächt sein.
Zeichenklasse [:%s:] unbekannt
(F) Die Klasse in der Zeichenklasse [: :] Syntax ist unbekannt. Siehe Perlre.
Die Zeichenklassensyntax [%s] gehört zu den Zeichenklassen
(W unsicher) Die Zeichenklasse konstruiert [: :], [= =] und [. .] gehen innerhalb Charakter
Klassen, die [] sind Teil des Konstrukts, zum Beispiel: /[012[:alpha:]345]/. Hinweis
dass [= =] und [. .] sind derzeit nicht implementiert; sie sind einfach Platzhalter für
zukünftige Erweiterungen.
Konstante ist keine %s-Referenz
(F) Ein konstanter Wert (vielleicht mit dem Pragma "use constant" deklariert) wird
dereferenziert, aber es handelt sich um den falschen Referenztyp. Die Meldung zeigt an
die Art der Referenz, die erwartet wurde. Dies weist normalerweise auf einen Syntaxfehler in
Dereferenzieren des konstanten Wertes. Siehe "Konstantenfunktionen" in perlsub und konstant.
konstant(%s): %s
(F) Der Parser hat Inkonsistenzen festgestellt, entweder beim Versuch, eine überladene
Konstante, oder wenn Sie versuchen, den im Escape "\N{...}" angegebenen Zeichennamen zu finden.
Vielleicht haben Sie vergessen, das entsprechende Pragma "overload" oder "charnames" zu laden? Sehen
Zeichennamen und Überladung.
CORE::%s ist kein Schlüsselwort
(F) Der CORE::-Namespace ist für Perl-Schlüsselwörter reserviert.
define(@array) ist veraltet
(D) definiert() ist normalerweise bei Arrays nicht nützlich, da es nach einem undefinierten sucht
Skalar Wert. Wenn Sie sehen möchten, ob das Array leer ist, verwenden Sie einfach "if (@array) { # not
leere }" zum Beispiel.
define(%hash) ist veraltet
(D) definiert() ist bei Hashes normalerweise nicht nützlich, da es auf undefined prüft
Skalar Wert. Wenn Sie sehen möchten, ob der Hash leer ist, verwenden Sie einfach "if (%hash) { # not
leere }" zum Beispiel.
Es wurde kein gültiger Header erstellt
Siehe Serverfehler.
(Meinten Sie "lokal" statt "unser"?)
(W misc) Denken Sie daran, dass "unser" die deklarierte globale Variable nicht lokalisiert. Sie haben
deklarierte es im gleichen lexikalischen Geltungsbereich, was überflüssig erscheint.
Dokument enthält keine Daten
Siehe Serverfehler.
Eingabe von effektiv %s fehlgeschlagen
(F) Während des Pragmas "use filetest" die echten und effektiven Uids wechseln oder
gids fehlgeschlagen.
false [] Bereich "%s" in regexp
(W regexp) Ein Zeichenklassenbereich muss mit einem Literalzeichen beginnen und enden, nicht
eine andere Zeichenklasse wie "\d" oder "[:alpha:]". Das "-" in Ihrem falschen Bereich ist
als wörtliches "-" interpretiert. Erwägen Sie, das "-", "\-" zu zitieren. Siehe Perlre.
Dateihandle %s nur zur Ausgabe geöffnet
(W io) Sie haben versucht, von einem Dateihandle zu lesen, das nur zum Schreiben geöffnet wurde. Wenn du beabsichtigt hast
Da es sich um ein Dateihandle mit Lese-/Schreibzugriff handelt, mussten Sie es mit "+<" oder "+>" oder "+>>" öffnen.
statt mit "<" oder nichts. Wenn Sie nur aus der Datei lesen möchten, verwenden Sie "<".
Siehe "öffnen" in perlfunc.
Herde() bei geschlossenem Dateihandle %s
(W geschlossen) Das Dateihandle, das Sie versuchen Herde() hat sich irgendwann geschlossen
vorher. Überprüfen Sie Ihren Logikfluss. Herde() arbeitet mit Dateihandles. Sind Sie
versuchen anzurufen Herde() auf einem Dirhandle mit dem gleichen Namen?
Das globale Symbol "%s" erfordert einen expliziten Paketnamen
(F) Sie haben gesagt "use strikte Variablen", was bedeutet, dass alle Variablen entweder
lexikalisch abgegrenzt (mit "my"), vorher mit "unser" deklariert oder explizit
qualifiziert zu sagen, in welchem Paket sich die globale Variable befindet (mithilfe von "::").
Hexadezimalzahl > 0xffffffff nicht tragbar
(W portabel) Die von Ihnen angegebene hexadezimale Zahl ist größer als 2**32-1 (4294967295)
und daher nicht zwischen Systemen portierbar. Weitere Informationen zur Portabilität finden Sie unter Perlport
Bedenken.
Ungültiger CRTL-Umgebungswert "%s"
(W intern) Eine VMS-spezifische Warnung. Perl hat versucht, die internen Daten der CRTL zu lesen
environ-Array und stieß auf ein Element ohne das zum Trennen verwendete "="-Trennzeichen
Schlüssel aus Werten. Das Element wird ignoriert.
Falsch formulierte Nachricht in prime_env_iter: |%s|
(W intern) Eine VMS-spezifische Warnung. Perl hat versucht, einen logischen Namen oder CLI . zu lesen
Symboldefinition bei der Vorbereitung der Iteration über %ENV und nicht das Erwartete gesehen
Trennzeichen zwischen Schlüssel und Wert, daher wurde die Zeile ignoriert.
Ungültige Binärziffer %s
(F) Sie haben eine andere Ziffer als 0 oder 1 in einer Binärzahl verwendet.
Ungültige Binärziffer %s ignoriert
(W-Ziffer) Möglicherweise haben Sie versucht, eine andere Ziffer als 0 oder 1 in einer Binärzahl zu verwenden.
Die Interpretation der Binärzahl wurde vor der fehlerhaften Ziffer gestoppt.
Unzulässige Anzahl von Bits in vec
(F) Die Anzahl der Bits in vec() (das dritte Argument) muss eine Zweierpotenz von 1 bis sein
32 (oder 64, wenn Ihre Plattform dies unterstützt).
Ganzzahlüberlauf in %s Zahl
(W-Überlauf) Die hexadezimale, oktale oder binäre Zahl, die Sie entweder als a
wörtlich oder als Argument zu verhexen() or oct () ist zu groß für Ihre Architektur und hat
in eine Gleitkommazahl umgewandelt wurde. Auf einer 32-Bit-Architektur die größte
ohne Überlauf darstellbare hexadezimale, oktale oder binäre Zahl ist 0xFFFFFFFF,
037777777777 bzw. 0b11111111111111111111111111111111. Beachten Sie, dass Perl
wandelt alle Zahlen transparent in eine Gleitkommadarstellung um
intern – vorbehaltlich des Verlusts von Genauigkeitsfehlern in nachfolgenden Operationen.
Ungültiges %s-Attribut: %s
Das angegebene Attribut für ein Unterprogramm oder eine Variable wurde von Perl oder von . nicht erkannt
ein vom Benutzer bereitgestellter Handler. Siehe Attribute.
Ungültige %s-Attribute: %s
Die angegebenen Attribute für ein Unterprogramm oder eine Variable wurden von Perl nicht erkannt oder
durch einen vom Benutzer bereitgestellten Handler. Siehe Attribute.
Ungültiger [] Bereich "%s" in Regexp
Der anstößige Bereich wird nun explizit angezeigt.
Ungültiges Trennzeichen %s in der Attributliste
(F) Etwas anderes als ein Doppelpunkt oder Leerzeichen wurde zwischen den Elementen von an . gesehen
Attributliste. Wenn das vorherige Attribut eine Parameterliste in Klammern hatte, vielleicht
diese Liste wurde zu früh beendet. Siehe Attribute.
Ungültiges Trennzeichen %s in der Attributliste der Unterroutine
(F) Etwas anderes als ein Doppelpunkt oder Leerzeichen wurde zwischen den Elementen von a . gesehen
Liste der Subroutinen-Attribute. Wenn das vorherige Attribut einen Parameter in Klammern hatte
Liste, vielleicht wurde diese Liste zu früh beendet.
verlassen effektiv %s fehlgeschlagen
(F) Während des Pragmas "use filetest" die echten und effektiven Uids wechseln oder
gids fehlgeschlagen.
Lvalue-Subs, die %s zurückgeben, noch nicht implementiert
(F) Aufgrund von Einschränkungen in der aktuellen Implementierung können Array- und Hash-Werte nicht
wird in Unterroutinen zurückgegeben, die im lvalue-Kontext verwendet werden. Siehe "Lvalue-Unterprogramme" in perlsub.
Methode %s nicht erlaubt
Siehe Serverfehler.
Fehlende %sbrace%s auf \N{}
(F) Falsche Syntax des Zeichennamenliterals "\N{charname}" in Anführungszeichen
Kontext.
Fehlender Befehl im geleiteten Öffnen
(W-Pipe) Sie haben die Konstruktion "open(FH, "| command")" oder "open(FH, "command |")" verwendet.
aber der Befehl fehlte oder war leer.
Fehlender Name in "mein Sub"
(F) Die reservierte Syntax für Subroutinen mit lexikalischem Geltungsbereich erfordert, dass sie a
Namen, unter denen sie gefunden werden können.
Kein %s angegeben für -%c
(F) Der angegebene Befehlszeilenschalter benötigt ein obligatorisches Argument, aber Sie haben es nicht
angegebenen.
Kein Paketname für Variable %s in "unser" erlaubt
(F) Vollqualifizierte Variablennamen sind in "unseren" Deklarationen nicht erlaubt, weil das
macht unter der bestehenden Semantik nicht viel Sinn. Eine solche Syntax ist für die Zukunft reserviert
Erweiterungen.
Kein Leerzeichen erlaubt nach -%c
(F) Das Argument zum angegebenen Befehlszeilenschalter muss unmittelbar danach folgen
den Schalter, ohne Zwischenräume.
keine UTC-Offset-Informationen; unter der Annahme, dass die Ortszeit UTC ist
(S) Eine Warnung speziell für VMS. Perl konnte den lokalen Zeitzonen-Offset nicht finden, also
Es wird davon ausgegangen, dass die lokale Systemzeit UTC entspricht. Wenn nicht, definieren Sie die
logischer Name SYS$TIMEZONE_DIFFERENTIAL in die Anzahl der Sekunden übersetzen, die
müssen zu UTC hinzugefügt werden, um die Ortszeit zu erhalten.
Oktalnummer > 037777777777 nicht portabel
(W tragbar) Die von Ihnen angegebene Oktalzahl ist größer als 2**32-1 (4294967295) und
daher nicht portabel zwischen Systemen. Weitere Informationen zur Portabilität finden Sie unter Perlport
Bedenken.
Siehe auch perlport zum Schreiben von portablem Code.
Panik: del_backref
(P) Fehler bei einer internen Konsistenzprüfung beim Versuch, eine schwache Referenz zurückzusetzen.
panik: kind popen errno read
(F) gegabeltes Kind gab eine unverständliche Nachricht über seinen Fehler zurück.
Panik: magic_killbackrefs
(P) Fehler bei einer internen Konsistenzprüfung beim Versuch, alle schwachen Referenzen auf zurückzusetzen
ein Objekt.
Klammern fehlen um "%s"-Liste
(W Klammern) Du hast etwas gesagt wie
mein $foo, $bar = @_;
als du meintest
mein ($foo, $bar) = @_;
Denken Sie daran, dass "my", "unser" und "local" enger als ein Komma binden.
Mögliche unbeabsichtigte Interpolation von %s im String
(W mehrdeutig) Früher versuchte Perl zu erraten, ob Sie ein Array haben wollten
interpoliert oder ein wörtliches @. Es tut dies nicht mehr; Arrays sind jetzt immer
in Strings interpoliert. Dies bedeutet, dass, wenn Sie so etwas versuchen:
drucken "[E-Mail geschützt] ";
und das Array @example nicht existiert, wird Perl "fred.com" ausgeben, was
wahrscheinlich nicht das was du wolltest. Um ein wörtliches "@"-Zeichen in einer Zeichenfolge zu erhalten, fügen Sie einen umgekehrten Schrägstrich ein
davor, so wie Sie ein wörtliches "$"-Zeichen erhalten würden.
Möglicher Y2K-Fehler: %s
(W y2k) Sie verketten die Zahl 19 mit einer anderen Zahl, die a . sein könnte
potenzielles Jahr-2000-Problem.
Pragma "attrs" ist veraltet, verwenden Sie stattdessen "sub NAME : ATTRS"
(W veraltet) Sie haben so etwas geschrieben:
Sub-Doit
{
attrs verwenden qw(locked);
}
Sie sollten stattdessen die neue Deklarationssyntax verwenden.
sub doit: gesperrt
{
...
Das Pragma "use attrs" ist nun obsolet und wird nur für Rückwärts-
Kompatibilität. Siehe "Subroutine-Attribute" in perlsub.
Vorzeitiges Ende der Skript-Header
Siehe Serverfehler.
Wiederholungszählung bei Paketüberläufen
(F) Sie können keine Wiederholungszahl angeben, die so groß ist, dass sie Ihre vorzeichenbehafteten Ganzzahlen überläuft.
Siehe "Packen" in perlfunc.
Wiederholungszählung bei Entpacküberläufen
(F) Sie können keine Wiederholungszahl angeben, die so groß ist, dass sie Ihre vorzeichenbehafteten Ganzzahlen überläuft.
Siehe "auspacken" in perlfunc.
realloc() des freigegebenen Speichers ignoriert
(S) Eine interne Routine namens realloc() auf etwas, das bereits befreit war.
Referenz ist schon schwach
(W misc) Sie haben versucht, eine bereits schwache Referenz zu schwächen. Das hat
keine Wirkung.
setpgrp kann keine Argumente annehmen
(F) Ihr System hat die setpgrp() von BSD 4.2, das keine Argumente akzeptiert, im Gegensatz zu POSIX
setpgid(), die eine Prozess-ID und eine Prozessgruppen-ID benötigt.
Seltsam *+?{} bei einem Ausdruck der Länge Null
(W regexp) Sie haben einen Quantifizierer für einen regulären Ausdruck an einer Stelle angewendet, an der er no
Sinn, wie bei einer Aussage mit einer Breite von Null. Versuchen Sie, den Quantor in das
Behauptung statt. Zum Beispiel der Weg zum Abgleich von "abc", vorausgesetzt, er wird befolgt
durch drei Wiederholungen von "xyz" ist "/abc(?=(?:xyz){3})/", nicht "/abc(?=xyz){3}/".
Schalten wirksam %s ist nicht implementiert
(F) Während wir unter dem Pragma "use filetest" sind, können wir das echte und das effektive nicht wechseln
Uids oder Gids.
Dieses Perl kann CRTL-Umgebungselemente (%s) nicht zurücksetzen
Dieses Perl kann keine CRTL-Environ-Elemente setzen (%s=%s)
(W intern) Warnungen speziell für VMS. Sie haben versucht, ein Element von . zu ändern oder zu löschen
das interne Environ-Array der CRTL, aber Ihre Perl-Kopie wurde nicht mit einer CRTL erstellt, die
enthielt die setenv() Funktion. Sie müssen Perl mit einer CRTL neu erstellen, die dies tut,
oder neu definieren PERL_ENV_TABLES (siehe perlvms), damit das Environ-Array nicht das Ziel ist
der Änderung in %ENV, die die Warnung erzeugt hat.
Zu spät, um %s Block auszuführen
(W void) Ein CHECK- oder INIT-Block wird während der eigentlichen Laufzeit definiert, wenn die
Gelegenheit, sie zu führen, ist bereits verstrichen. Vielleicht laden Sie eine Datei mit
"require" oder "do", wenn Sie stattdessen "use" verwenden sollten. Oder vielleicht solltest du setzen
das "require" oder "do" innerhalb eines BEGIN-Blocks.
Unbekannt öffnen() Modus '%s'
(F) Das zweite Argument von 3-Argument öffnen() ist nicht in der Liste der gültigen Modi:
"<", ">", ">>", "+<", "+>", "+>>", "-|", "|-".
Unbekannter Prozess %x hat Nachricht an prime_env_iter gesendet: %s
(P) Ein Fehler, der VMS eigen ist. Perl hat Werte für %ENV gelesen, bevor es über iteriert wurde
und jemand anderes steckte eine Nachricht in den von Perl erwarteten Datenstrom. Jemandes
sehr verwirrt, oder vielleicht versuchen Sie, Perls Bevölkerung von %ENV für schändlich zu untergraben
Zwecke.
Unerkannte Flucht \\%c passiert
(W misc) Sie haben eine Backslash-Zeichen-Kombination verwendet, die von Perl nicht erkannt wird.
Der Charakter wurde wörtlich verstanden.
Unterminierter Attributparameter in der Attributliste
(F) Der Lexer hat beim Parsen eines Attributs ein öffnendes (linkes) Klammerzeichen gesehen
Liste, aber das passende schließende (rechte) Klammerzeichen wurde nicht gefunden. Sie können
müssen Sie einen umgekehrten Schrägstrich hinzufügen (oder entfernen), um Ihre Klammern auszugleichen. Sehen
Attribute.
Unterminierte Attributliste
(F) Der Lexer hat zu Beginn von an . etwas anderes als einen einfachen Bezeichner gefunden
-Attribut, und es war kein Semikolon oder der Anfang eines Blocks. Vielleicht hast du gekündigt
die Parameterliste des vorherigen Attributs zu früh. Siehe Attribute.
Unterminierter Attributparameter in der Attributliste der Unterroutine
(F) Der Lexer hat beim Parsen einer Subroutine ein öffnendes (linkes) Klammerzeichen gesehen
Attributliste, aber das passende schließende (rechte) Klammerzeichen wurde nicht gefunden.
Möglicherweise müssen Sie einen umgekehrten Schrägstrich hinzufügen (oder entfernen), um Ihre Klammern zu erhalten
Balance.
Attributliste für nicht beendete Unterprogramme
(F) Der Lexer hat am Anfang von a . etwas anderes als einen einfachen Bezeichner gefunden
Unterprogrammattribut, und es war kein Semikolon oder der Anfang eines Blocks. Vielleicht du
hat die Parameterliste des vorherigen Attributs zu früh beendet.
Wert des CLI-Symbols "%s" zu lang
(W misc) Eine Warnung speziell für VMS. Perl hat versucht, den Wert eines %ENV-Elements zu lesen
aus einer CLI-Symboltabelle und hat eine resultierende Zeichenfolge gefunden, die länger als 1024 Zeichen ist.
Der Rückgabewert wurde auf 1024 Zeichen gekürzt.
Versionsnummer muss eine konstante Zahl sein
(P) Der Versuch, eine "use Module nn LIST"-Anweisung in ihr Äquivalent zu übersetzen
Der Baustein "BEGIN" hat eine interne Inkonsistenz mit der Versionsnummer festgestellt.
New Tests
lib/attr
Kompatibilitätstests für "sub : attrs" im Vergleich zu den älteren "use attrs".
lib/env
Testet auf neue skalare Fähigkeiten der Umgebung (zB "use Env qw($BAR);").
lib/env-Array
Testet auf neue Umgebungs-Array-Fähigkeit (zB "use Env qw(@PATH);").
lib/io_const
E/A-Konstanten (SEEK_*, _IO*).
lib/io_dir
Verzeichnisbezogene IO-Methoden (neu, lesen, schließen, zurückspulen, gebunden löschen).
lib/io_multihomed
INET-Sockets mit Multihomed-Hosts.
lib/io_poll
IO Umfrage().
lib/io_unix
UNIX-Sockets.
op/attr
Regressionstests für "my ($x,@y,%z) : attrs" und .
op/Dateitest
Dateitestoperatoren.
op/lex_assign
Überprüfen Sie Vorgänge, die auf Pad-Objekte zugreifen (Lexika und Temporäre).
op/exists_sub
Überprüfen Sie die Operationen "existiert &sub".
Unvereinbar Änderungen
Perl Quelle Inkompatibilitäten
Beachten Sie, dass alle neu hinzugefügten oder verbesserten Warnungen
nicht als inkompatible Änderungen angesehen.
Da alle neuen Warnungen explizit über den Schalter "-w" oder die "Warnungen" angefordert werden müssen
pragma liegt es letztendlich in der Verantwortung des Programmierers, sicherzustellen, dass Warnungen
mit Bedacht aktiviert.
CHECK ist ein neues Stichwort
Alle Unterprogrammdefinitionen mit dem Namen CHECK sind jetzt speziell. Siehe "/"Unterstützung für CHECK
Blöcke"" für weitere Informationen.
Die Behandlung von Listen-Slices von undef hat sich geändert
Es besteht eine potenzielle Inkompatibilität im Verhalten von Listen-Slices, die enthalten sind
ganz von undefinierten Werten. Siehe "Verhalten von Listen-Slices ist konsistenter".
Das Format von $English::PERL_VERSION ist anders
Das englische Modul setzt jetzt $PERL_VERSION auf $^V (einen Zeichenfolgenwert) statt auf $] (a
Zahlenwert). Dies ist eine potenzielle Inkompatibilität. Senden Sie uns einen Bericht über perlbug, wenn
Sie sind davon betroffen.
Die Gründe für diese Änderung finden Sie unter "Verbessertes Perl-Versionsnummerierungssystem".
Literale der Form 1.2.3 parsen anders
Bisher wurden numerische Literale mit mehr als einem Punkt als a . interpretiert
Gleitkommazahl, die mit einer oder mehreren Zahlen verkettet ist. Solche "Zahlen" sind jetzt
als Strings geparst, die aus den angegebenen Ordinalzahlen bestehen.
Beispiel: "print 97.98.99" wurde in früheren Versionen zur Ausgabe von 97.9899 verwendet, aber jetzt
druckt "abc".
Siehe "Unterstützung für Zeichenfolgen, die als Ordinalvektoren dargestellt werden".
Möglicherweise geänderter Pseudo-Zufallszahlengenerator
Perl-Programme, die davon abhängen, einen bestimmten Satz von Pseudo-Zufallszahlen zu reproduzieren, können
produzieren jetzt aufgrund von Verbesserungen an der rand () eingebaut. Sie können
Verwenden Sie "sh Configure -Drandfunc=rand", um das alte Verhalten zu erhalten.
Siehe "Besserer Pseudo-Zufallszahlengenerator".
Hashing-Funktion für Hash-Schlüssel hat sich geändert
Auch wenn Perl-Hashes keine Ordnungserhaltung sind, ist die scheinbar zufällige Reihenfolge
die beim Iterieren des Inhalts eines Hashs angetroffen wird, wird tatsächlich durch die
Hash-Algorithmus verwendet. Verbesserungen des Algorithmus können eine zufällige Reihenfolge ergeben, die
is anders sein kann oder ander sein wird gegenüber früheren Versionen, insbesondere beim Iterieren von Hashes.
Weitere Informationen finden Sie unter „Besseres Verhalten von Hashes im schlimmsten Fall“.
"undef" schlägt bei schreibgeschützten Werten fehl
Die Verwendung des Operators "undef" für einen schreibgeschützten Wert (wie $1) hat die gleiche Wirkung wie
das Zuweisen von "undef" zum schreibgeschützten Wert - es wird eine Ausnahme ausgelöst.
Close-on-Exec-Bit kann auf Pipe- und Socket-Handles gesetzt werden
Pipe- und Socket-Handles unterliegen nun auch dem ermittelten Close-on-Exec-Verhalten
durch die spezielle Variable $^F.
Siehe "Konsistenteres Close-on-Exec-Verhalten".
"$$1" zu schreiben, um "${$}1" zu bedeuten, wird nicht unterstützt
Perl 5.004 hat die Interpretation von $$1 und ähnlichem in interpolierten . als veraltet markiert
Zeichenfolgen, die "$$ . "1"" bedeuten, aber immer noch erlaubt sind.
In Perl 5.6.0 und höher bedeutet "$$1" immer "${$1}".
löschen(), jeder(), Werte () und "\(%h)"
operiere mit Aliasnamen für Werte, nicht mit Kopien
löschen(), jeder(), Werte () und Hashes (zB "\(%h)") in einem Listenkontext geben die
tatsächliche Werte im Hash anstelle von Kopien (wie in früheren Versionen).
Typische Redewendungen für die Verwendung dieser Konstrukte kopieren die zurückgegebenen Werte, aber dies kann dazu führen, dass
ein wesentlicher Unterschied beim Erstellen von Verweisen auf die zurückgegebenen Werte. Schlüssel im
Hash werden immer noch als Kopien zurückgegeben, wenn ein Hash iteriert wird.
Siehe auch "löschen(), jeder(), Werte () und Hash-Iteration sind schneller".
vec(EXPR,OFFSET,BITS) erzwingt Zweierpotenzen BITS
vec() erzeugt einen Laufzeitfehler, wenn das BITS-Argument keine gültige Zweierpotenz ist
ganze Zahl.
Der Text einiger Diagnoseausgaben hat sich geändert
Die meisten Verweise auf interne Perl-Operationen in der Diagnose wurden geändert in:
beschreibender. Dies kann ein Problem bei Programmen sein, die sich fälschlicherweise auf die
genauer Text der Diagnose für die ordnungsgemäße Funktion.
"%@" wurde entfernt
Die undokumentierte Spezialvariable "%@", die früher "Hintergrundfehler" angesammelt hat
(wie die, die passieren in ZERSTÖREN()) wurde entfernt, weil es könnte
möglicherweise zu Speicherlecks führen.
Eingeklammert nicht() verhält sich wie ein Listenoperator
Der „nicht“-Operator fällt jetzt unter das „wenn es wie eine Funktion aussieht, verhält es sich wie a
Funktion" Regel.
Als Ergebnis kann die Klammerform mit "grep" und "map" verwendet werden. Die folgende
Konstrukt war früher ein Syntaxfehler, aber jetzt funktioniert es wie erwartet:
grep nicht($_), @things;
Andererseits funktioniert die Verwendung von "not" mit einem wörtlichen Listen-Slice möglicherweise nicht. Die folgende
zuvor erlaubtes Konstrukt:
nicht drucken (1,2,3)[0];
muss jetzt mit zusätzlichen Klammern geschrieben werden:
drucke nicht((1,2,3)[0]);
Das Verhalten bleibt unberührt, wenn auf "not" keine Klammern folgen.
Semantik des Bareword-Prototyps "(*)" hat sich geändert
Die Semantik des Bareword-Prototyps "*" hat sich geändert. Perl 5.005 immer erzwungen
einfache skalare Argumente für einen Typglob, was in Situationen nicht nützlich war, in denen die
Die Subroutine muss zwischen einem einfachen Skalar und einem Typglob unterscheiden. Das neue Verhalten
besteht darin, einem Typeglob keine Bareword-Argumente zu erzwingen. Der Wert ist immer sichtbar
entweder als einfacher Skalar oder als Verweis auf einen Typglob.
Siehe "Funktionellerer Bareword-Prototyp (*)".
Die Semantik von Bitoperatoren kann sich auf 64-Bit-Plattformen geändert haben
Wenn Ihre Plattform entweder nativ 64-Bit ist oder wenn Perl für die Verwendung konfiguriert wurde
64-Bit-Ganzzahlen, dh $Config{ivsize} ist 8, kann eine mögliche Inkompatibilität vorliegen
im Verhalten bitweiser numerischer Operatoren (& | ^ ~ << >>). Diese Operatoren waren früher
Arbeiten Sie in früheren Versionen ausschließlich mit den unteren 32 Bits von Ganzzahlen, aber jetzt
über die gesamte native Integralbreite arbeiten. Beachten Sie insbesondere, dass ein unäres "~"
führt zu unterschiedlichen Ergebnissen auf Plattformen mit unterschiedlichen $Config{ivsize}. Für
Portabilität, stellen Sie sicher, dass Sie die überschüssigen Bits im Ergebnis von unärem "~" maskieren, z.
"~$x & 0xffffffff".
Siehe "Bitoperatoren unterstützen die volle native Ganzzahlbreite".
Mehr Builtins verfälschen ihre Ergebnisse
Wie in "Verbesserte Sicherheitsfunktionen" beschrieben, kann es in a . mehr Fehlerquellen geben
Perl-Programm.
Um diese neuen Verhaltensweisen zu vermeiden, können Sie Perl mit der Option Configure erstellen
"-Accflags=-DINCOMPLETE_TAINTS". Beachten Sie, dass die folgende Perl-Binärdatei möglicherweise unsicher ist.
C Quelle Inkompatibilitäten
"PERL_POLLUTE"
Release 5.005 hat alte globale Symbolnamen durch die Bereitstellung von Präprozessor-Makros überholt
für Kompatibilität mit Erweiterungsquellen. Ab Release 5.6.0 sind diese Präprozessor
Definitionen sind standardmäßig nicht verfügbar. Sie müssen Perl explizit mit kompilieren
"-DPERL_POLLUTE", um diese Definitionen abzurufen. Für Erweiterungen, die noch das alte verwenden
Symbolen kann diese Option über MakeMaker angegeben werden:
perl-Makefile.PL VERSCHMUTZUNG=1
"PERL_IMPLICIT_CONTEXT"
Diese neue Build-Option bietet eine Reihe von Makros für alle API-Funktionen, sodass ein
ein implizites Interpreter-/Thread-Kontextargument wird an jede API-Funktion übergeben. Als ein
Als Ergebnis kommt so etwas wie "sv_setsv(foo,bar)" einem Makroaufruf gleich, der
übersetzt in etwa "Perl_sv_setsv(my_perl,foo,bar)". Während dies ist
Es wird allgemein erwartet, dass keine wesentlichen Probleme mit der Quellkompatibilität auftreten
Unterschied zwischen einem Makro und einem echten Funktionsaufruf muss berücksichtigt werden.
Dies bedeutet, dass dort is ein Problem mit der Quellkompatibilität infolgedessen, wenn Ihr
Erweiterungen versuchen, Zeiger auf eine der Perl-API-Funktionen zu verwenden.
Beachten Sie, dass das obige Problem für den Standard-Build von Perl nicht relevant ist, dessen
Schnittstellen entsprechen weiterhin denen früherer Versionen (aber vorbehaltlich der anderen Optionen
hier beschrieben).
Siehe "Hintergrund und PERL_IMPLICIT_CONTEXT" in perlguts für detaillierte Informationen über die
Auswirkungen der Erstellung von Perl mit dieser Option.
HINWEIS: PERL_IMPLICIT_CONTEXT wird automatisch aktiviert, wenn Perl erstellt wird
mit einem von -Dusethreads, -Dusemultiplicity oder beiden. Es ist nicht
beabsichtigt, von Benutzern zu diesem Zeitpunkt aktiviert zu werden.
"PERL_POLLUTE_MALLOC"
Die Aktivierung von Perls malloc in Release 5.005 und früher führte dazu, dass der Namespace des
die malloc-Funktionsfamilie des Systems von den Perl-Versionen an sich gerissen werden, da von
Standardmäßig haben sie die gleichen Namen verwendet. Abgesehen davon, dass es Probleme auf Plattformen verursacht, die dies nicht tun
lassen sich diese Funktionen sauber austauschen, das bedeutete auch, dass die Systemversionen
konnte nicht in Programmen aufgerufen werden, die Malloc von Perl verwendeten. Frühere Versionen von Perl
haben zugelassen, dass dieses Verhalten mit HIDEMYMALLOC und EMBEDMYMALLOC . unterdrückt wird
Präprozessordefinitionen.
Ab Release 5.6.0 hat die malloc-Funktionsfamilie von Perl unterschiedliche Standardnamen
von den Systemversionen. Sie müssen Perl explizit mit kompilieren
"-DPERL_POLLUTE_MALLOC", um das ältere Verhalten zu erhalten. HIDEMYMALLOC und EMBEDMYMALLOC
haben keine Auswirkungen, da das von ihnen aktivierte Verhalten jetzt das Standardverhalten ist.
Beachten Sie, dass diese Funktionen nicht bilden die Speicherzuweisungs-API von Perl. Siehe "Erinnerung
Allocation" in perlguts für weitere Informationen dazu.
Kompatibel C Quelle API Änderungen
"PATCHLEVEL" ist jetzt "PERL_VERSION"
Die cpp-Makros "PERL_REVISION", "PERL_VERSION" und "PERL_SUBVERSION" sind jetzt
standardmäßig von perl.h verfügbar und spiegeln die Basisrevision, Patchlevel und . wider
Subversion bzw. "PERL_REVISION" hatte kein vorheriges Äquivalent, während
"PERL_VERSION" und "PERL_SUBVERSION" waren bisher als "PATCHLEVEL" und
"SUBVERSION".
Die neuen Namen verursachen weniger Verschmutzung der cpp Namensraum und spiegeln die Zahlen wider
haben sich in der Praxis etabliert. Aus Kompatibilitätsgründen sind die alten Namen immer noch
unterstützt, wenn patchlevel.h ist explizit enthalten (wie zuvor erforderlich), also gibt es
keine Quelleninkompatibilität durch die Änderung.
Binär Inkompatibilitäten
Im Allgemeinen wird erwartet, dass der Standardbuild dieser Version binärkompatibel ist für
Erweiterungen, die mit dem Release 5.005 oder seinen Wartungsversionen erstellt wurden. Allerdings spezifisch
Plattformen haben möglicherweise die Binärkompatibilität aufgrund von Änderungen in den Standardeinstellungen in
Hinweis-Dateien. Bitte überprüfen Sie daher immer die plattformspezifischen README-Dateien
für gegenteilige Hinweise.
Die Usethreads oder usemultiplicity-Builds sind nicht binär kompatibel mit dem entsprechenden
baut in 5.005.
Auf Plattformen, die eine explizite Liste von Exporten erfordern (AIX, OS/2 und Windows, unter anderem)
andere), rein interne Symbole wie Parserfunktionen und die Laufzeit-Opcodes sind es nicht
standardmäßig exportiert. Früher hat Perl 5.005 alle Funktionen exportiert, unabhängig davon, ob sie
als Teil der öffentlichen API angesehen wurden oder nicht.
Die vollständige Liste der öffentlichen API-Funktionen finden Sie unter perlapi.
Bekannt Probleme
Thread Test Ausfälle
Die Subtests 19 und 20 des lib/thr5005.t-Tests scheitern bekanntlich an grundlegenden Problemen
in der 5.005-Threading-Implementierung. Dies sind keine neuen Fehler – Perl 5.005_0x hat die
gleichen Bugs, hatte aber diese Tests nicht.
EBCDIC Plattformen nicht unterstützt
In früheren Perl-Releases waren EBCDIC-Umgebungen wie OS390 (auch bekannt als Open Edition
MVS) und VM-ESA wurden unterstützt. Aufgrund von Änderungen, die durch die UTF-8 (Unicode)-Unterstützung erforderlich sind,
die EBCDIC-Plattformen werden in Perl 5.6.0 nicht unterstützt.
In 64-bit HP-UX die lib/io_multihomed Test Mai hängen
Der lib/io_multihomed-Test kann in HP-UX hängen bleiben, wenn Perl für 64-Bit konfiguriert wurde.
Da andere 64-Bit-Plattformen bei diesem Test nicht hängen bleiben, ist HP-UX verdächtig. Alle Anderen
Tests bestehen in 64-Bit-HP-UX. Der Test versucht, "multihomed" zu erstellen und zu verbinden
Sockets (Sockets mit mehreren IP-Adressen).
NÄCHSTER SCHRITT 3.3 POSIX Test Fehler
In NEXTSTEP 3.3p2 ist die Implementierung der strftime(3) in den Betriebssystembibliotheken
ist fehlerhaft: Das %j-Format nummeriert die Tage eines Monats beginnend bei Null, was, während es ist
logisch für Programmierer, wird dazu führen, dass die Untertests 19 bis 27 des lib/posix-Tests fehlschlagen können.
Tru64 (aka Service Unix, Auch bekannt als: Dezember OSF/1) lib/sdbm Test Fehler mit gcc
Wenn mit gcc 2.95 kompiliert wird, schlägt der lib/sdbm-Test fehl (Dump-Core). Die Heilung besteht darin, die
Vendor cc, es kommt mit dem Betriebssystem und produziert guten Code.
UNICOS/mk CC Ausfälle im Einrichtung Lauf
In UNICOS/mk können während des Konfigurationslaufs folgende Fehler auftreten:
Erraten, welche Symbole Ihr C-Compiler und -Präprozessor definieren...
CC-20 cc: FEHLER Datei = try.c, Zeile = 3
...
fehlerhafter Schalter yylook 79schlechter Schalter yylook 79schlechter Schalter yylook 79schlechter Schalter yylook 79#ifdef A29K
...
4 Fehler bei der Kompilierung von "try.c" erkannt.
Schuld daran ist das kaputte awk von UNICOS/mk. Die Wirkung ist zum Glück eher mild: Perl
selbst wird durch den Fehler nicht beeinträchtigt, nur das Dienstprogramm h2ph, das mit Perl geliefert wird, und
das wird heutzutage eher selten gebraucht.
Pfeil Operator und Arrays
Wenn das linke Argument des Pfeiloperators "->" ein Array oder der "Skalar"-Operator ist
auf einem Array ausgeführt wird, muss das Ergebnis der Operation als fehlerhaft betrachtet werden. Für
Beispiel:
@x->[2]
Skalar(@x)->[2]
Diese Ausdrücke werden in einer zukünftigen Version von Perl Laufzeitfehler erhalten.
Experimentell Funktionen
Wie oben besprochen, sind viele Funktionen noch experimentell. Schnittstellen und Implementierung
dieser Funktionen können sich ändern und im Extremfall sogar entfernt werden
einige zukünftige Versionen von Perl. Diese Funktionen umfassen Folgendes:
Themen
Unicode
64-Bit-Unterstützung
Lvalue-Unterprogramme
Schwache Referenzen
Der Pseudo-Hash-Datentyp
Die Compiler-Suite
Interne Implementierung von File Globbing
Das DB-Modul
Der Code für reguläre Ausdrücke erstellt:
"(?{ code })" und "(??{ code })"
Überholt Diagnose
Zeichenklassensyntax [: :] ist für zukünftige Erweiterungen reserviert
(W) Innerhalb von Zeichenklassen für reguläre Ausdrücke ([]) die Syntax, die mit "[:" beginnt
und endet mit ":]" ist für zukünftige Erweiterungen reserviert. Wenn Sie vertreten müssen
diese Zeichenfolgen innerhalb einer Zeichenklasse für reguläre Ausdrücke, zitieren Sie einfach das
eckige Klammern mit dem umgekehrten Schrägstrich: "\[:" und ":\]".
Falsch formulierter logischer Name |%s| in prime_env_iter
(W) Eine Warnung speziell für VMS. Ein logischer Name wurde bei der Vorbereitung auf . gefunden
iteriere über %ENV, was die syntaktischen Regeln für logische Namen verletzt. Denn
es kann nicht normal übersetzt werden, es wird übersprungen und erscheint nicht in %ENV. Dies
kann ein harmloses Ereignis sein, da einige Softwarepakete die logische
Benennen Sie Tabellen und führen Sie nicht standardmäßige Namen ein, oder es kann darauf hinweisen, dass ein logischer Name
Tabelle wurde beschädigt.
In String muss @%s jetzt als \@%s . geschrieben werden
Die Beschreibung dieses Fehlers lautete früher:
(Eines Tages wird es einfach annehmen, dass ein @ ohne Backslash
interpoliert ein Array.)
Dieser Tag ist gekommen und dieser fatale Fehler wurde beseitigt. Es wurde ersetzt durch a
stattdessen nicht tödliche Warnung. Siehe "Arrays werden jetzt immer in doppelte Anführungszeichen interpoliert
Zeichenfolgen" für Details.
Wahrscheinliches Prioritätsproblem auf %s
(W) Der Compiler hat ein Bareword gefunden, wo er eine Bedingung erwartete, was oft
zeigt an, dass ein || oder && wurde als Teil des letzten Arguments des vorherigen geparst
konstruieren, zum Beispiel:
FOO öffnen || sterben;
regexp zu groß
(F) Die aktuelle Implementierung von regulären Ausdrücken verwendet Shorts als Adress-Offsets
innerhalb einer Zeichenfolge. Leider bedeutet dies, dass, wenn der reguläre Ausdruck kompiliert wird zu
länger als 32767, wird es explodieren. Normalerweise, wenn Sie einen regulären Ausdruck benötigen, ist dies
groß, gibt es einen besseren Weg, dies mit mehreren Anweisungen zu tun. Siehe Perlre.
Verwendung von "$$ " bedeutet "${$} " ist veraltet
(D) Perl-Versionen vor 5.004 haben jeden Typmarker, gefolgt von "$" und a . falsch interpretiert
Ziffer. Beispielsweise wurde "$$0" fälschlicherweise als "${$}0" anstelle von "${$0}" interpretiert.
Dieser Fehler ist (meistens) in Perl 5.004 behoben.
Die Entwickler von Perl 5.004 konnten diesen Fehler jedoch nicht vollständig beheben, da bei
mindestens zwei weit verbreitete Module hängen von der alten Bedeutung von "$$0" in einem String ab. Also Perl
5.004 interpretiert immer noch "$$ " auf die alte (gebrochene) Art innerhalb der Saiten; aber es
erzeugt diese Meldung als Warnung. Und in Perl 5.005 wird diese spezielle Behandlung
beenden.
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. Möglicherweise gibt es auch Informationen unter http://www.perl.com/perl/
, die Perl-Homepage.
Wenn Sie glauben, dass Sie einen nicht gemeldeten Fehler haben, führen Sie bitte die Perlbug Programm enthalten mit
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.
Verwenden Sie perl56delta online mit den onworks.net-Diensten