perl58delta - Online w chmurze

Jest to polecenie perl58delta, które można uruchomić u dostawcy bezpłatnego hostingu OnWorks przy użyciu jednej z naszych wielu darmowych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online Windows lub emulator online MAC OS

PROGRAM:

IMIĘ


perl58delta - co nowego w perlu v5.8.0

OPIS


W tym dokumencie opisano różnice między wersją 5.6.0 a wersją 5.8.0.

Wiele poprawek błędów w wersji 5.8.0 było już widocznych w wydaniu konserwacyjnym 5.6.1
te dwie wersje były ściśle skoordynowane (podczas gdy 5.8.0 nadal nazywano
5.7.coś).

Zmiany wprowadzone w wersji 5.6.1 są oznaczone jako „[561]”. Wiele z nich
zmiany były dalej rozwijane od czasu wydania 5.6.1, są one oznaczone jako „[561+]”.

Możesz zobaczyć listę zmian w wydaniu 5.6.1 (zarówno z wydania 5.005_03 jak i
wydanie 5.6.0) czytając perl561delta.

Najważniejsze In 5.8.0


· Lepsza obsługa Unicode

· Nowa implementacja IO

· Nowa implementacja wątku

· Lepsza dokładność numeryczna

· Bezpieczne sygnały

· Wiele nowych modułów

· Bardziej rozbudowane testy regresji

Niezgodny Zmiany


Binarna Niezgodność
Perl 5.8 is nie dwójkowy zgodny w wcześniej komunikaty of Perła.

You mieć do przekompilować Twój XS moduły.

(Moduły Pure Perl powinny nadal działać.)

Głównym powodem nieciągłości jest nowa architektura IO o nazwie PerlIO. PerlIO
jest domyślną konfiguracją, ponieważ bez niej wiele nowych funkcji Perla 5.8 nie może istnieć
używany. Innymi słowy: wystarczy przekompilować moduły zawierające kod XS, przepraszam
o tym.

W przyszłych wersjach Perla moduły XS nieobsługujące PerlIO mogą stać się całkowicie nieobsługiwane.
Nie powinno to być jednak zbyt trudne dla autorów modułów: PerlIO zostało zaprojektowane jako
zastąpienie drop-in (na poziomie kodu źródłowego) dla interfejsu stdio.

W zależności od platformy, istnieją również inne powody, dla których zdecydowaliśmy się na zerwanie z binarnością
kompatybilność, czytaj dalej.

64-bit Platformy i malloc
Jeśli twoje wskaźniki mają szerokość 64 bitów, Perl malloc nie jest już używany, ponieważ tak jest
nie działają dobrze ze wskaźnikami 8-bajtowymi. Ponadto, zwykle system malloc na takich platformach
są znacznie lepiej zoptymalizowane dla tak dużych modeli pamięci niż malloc Perla. Trochę pamięci-
głodne aplikacje Perla, takie jak PDL, nie działają dobrze z malloc Perla. Wreszcie inne
aplikacje niż Perl (takie jak mod_perl) preferują system malloc. Taki
platformy obejmują Alpha i 64-bitowe HPPA, MIPS, PPC i Sparc.

AIX Ładowanie dynamiczne
Dynaloading w systemie AIX wykorzystuje teraz w wersjach AIX 4.3 i nowszych natywny interfejs dlopen
AIX zamiast starego emulowanego interfejsu. Ta zmiana prawdopodobnie załamie się wstecz
kompatybilność ze skompilowanymi modułami. Zmiana została wprowadzona, aby Perl był bardziej zgodny z
inne aplikacje, takie jak mod_perl, które używają natywnego interfejsu systemu AIX.

Atrybuty dla "mój" zmienne już dziś obsługiwane at czas działania
Składnia „moje WYRAŻ: ATTRS” stosuje teraz atrybuty zmiennych w czasie wykonywania. (Podprogram i
„nasze” zmienne nadal otrzymują atrybuty stosowane w czasie kompilacji.) Zobacz atrybuty dla
Dodatkowe Szczegóły. W szczególności pozwala to jednak na przydatność atrybutów zmiennych
dla interfejsów „powiązanych”, co było wadą wcześniejszych wydań. Uwaga, nowy
semantyka nie działa z modułem Attribute::Handlers (od wersji 0.76).

Gniazdo Rozbudowa Dynamiczny in VMS
Rozszerzenie Socket jest teraz ładowane dynamicznie, a nie wbudowane statycznie. To
może, ale nie musi, być problemem ze starożytnymi stosami TCP/IP VMS: nie wiemy, ponieważ my
nie byliśmy w stanie przetestować Perla w takich konfiguracjach.

w formacie IEEE Pływające punkt Domyślnie on Otwórz VMS Alfa
Perl używa teraz formatu IEEE (T_FLOAT) jako domyślnego wewnętrznego formatu zmiennoprzecinkowego
OpenVMS Alpha, potencjalnie łamiąca kompatybilność binarną z zewnętrznymi bibliotekami lub
istniejące dane. G_FLOAT jest nadal dostępny jako opcja konfiguracyjna. Domyślnie na VAX
(D_FLOAT) nie uległ zmianie.

Nowości Unicode Semantyka (nie jeszcze "posługiwać się utf8", prawie)
Wcześniej w Perlu 5.6, aby używać Unicode, można by powiedzieć „użyj utf8”, a następnie operacje
(jak konkatenacja łańcuchów) były zgodne z Unicode w tym zakresie leksykalnym.

Okazało się, że jest to niewygodny interfejs, aw Perlu 5.8 model Unicode ma
całkowicie zmieniony: teraz „Unicodeness” jest powiązany z samymi danymi i dla większości
czas „użyj utf8” nie jest w ogóle potrzebny. Jedynym pozostałym zastosowaniem „użyj utf8” jest sytuacja, gdy
Sam skrypt Perla został napisany w kodowaniu UTF-8 Unicode. (UTF-8 nie był
ustawiony jako domyślny, ponieważ istnieje wiele skryptów Perla, które używają różnych
krajowych ośmiobitowych zestawów znaków, co byłoby nielegalne w UTF-8.)

Zobacz perluniintro, aby zapoznać się z wyjaśnieniem obecnego modelu i utf8, aby zapoznać się z bieżącym użyciem
pragma utf8.

Nowości Unicode Właściwości
Unicode skrypty są teraz obsługiwane. Skrypty są podobne (i lepsze) do Unicode
Bloki. Różnica między skryptami a blokami polega na tym, że skrypty to glify używane przez a
język lub grupę języków, podczas gdy bloki są bardziej sztucznymi grupami
(przeważnie) 256 znaków w oparciu o numerację Unicode.

Ogólnie rzecz biorąc, skrypty są bardziej inkluzywne, ale nie uniwersalnie. Na przykład podczas
skrypt „łaciński” zawiera wszystkie znaki łacińskie i ich różne znaki diakrytyczne-ozdobione
wersjach, nie obejmuje różnych znaków interpunkcyjnych ani cyfr (ponieważ nie są one wyłącznie
"Łacina").

Obsługiwanych jest teraz wiele innych właściwości, w tym „\p{L&}”, „\p{Any}”
"\p{Przypisany}", "\p{Nieprzypisany}", "\p{Blank}" [561] i "\p{SpacePerl}" [561] (wraz z
oczywiście ich wersje „\P{...}”). Zobacz perlunicode, aby uzyskać szczegółowe informacje i więcej dodatków.

Przedrostek „In” lub „Is” w nazwach używanych z „\p{...}” i „\P{...}” jest teraz prawie
zawsze opcjonalne. Jedynym wyjątkiem jest to, że przedrostek „In” jest wymagany do oznaczenia Unicode
block, gdy nazwa bloku jest w konflikcie z nazwą skryptu. Na przykład „\p{tybetański}” odnosi się do
skrypt, podczas gdy „\p{InTibetan}” odnosi się do bloku. Kiedy nie ma konfliktu nazw, ty
można pominąć „In” w nazwie bloku (np. „\p{BraillePatterns}”), ale dla bezpieczeństwa
prawdopodobnie najlepiej zawsze używać „In”).

NR NR (...) Zamiast Of SKALARNY(...)
Odwołanie do odwołania jest teraz skracane jako „RE(0x81485ec)” zamiast
"SKALARNY(0x81485ec)”, aby być bardziej spójnym z wartością zwracaną przez ref().

pakować/rozpakowywać D / F recyklingu
Nieudokumentowane litery D/F szablonu pakowania/rozpakowywania zostały poddane recyklingowi w celu lepszego wykorzystania: teraz
oznaczają długie podwójne (jeśli są obsługiwane przez platformę) i NV (wewnętrzny pływający Perl
rodzaj punktu). (Kiedyś były aliasami dla d/f, ale nigdy o tym nie wiedziałeś).

kula() już dziś powraca nazwy plików in alfabetyczny zamówienie
Lista nazw plików z kula() (lub <...>) jest teraz domyślnie sortowane alfabetycznie
zgodny z csh (co miało miejsce wcześniej na większości platform uniksowych). (bsd_glob() robi
nadal sortuje platformę natywnie, ASCII lub EBCDIC, chyba że podano GLOB_ALPHASORT.) [561]

Wycofanie
· Semantyka bless(REF, REF) była niejasna i dopóki ktoś tego nie udowodni, aby to zrobić
sens, to jest zabronione.

· Przestarzała biblioteka chat2, która nigdy nie powinna mieć możliwości ucieczki
laboratorium zostało zlikwidowane.

· Używanie chdir("") lub chdir(undef) zamiast explicit chdir() jest wątpliwe. Porażka
(pomyśl chdir(jakaś_funkcja()) może prowadzić do niezamierzonych chdir() do katalogu domowego,
dlatego to zachowanie jest przestarzałe.

· Wbudowany wysypisko() funkcja prawdopodobnie przeżyła większość swojej użyteczności. Rdzeń-
funkcja dumpingu pozostanie w przyszłości dostępna jako wyraźne wezwanie do
„CORE::dump()”, ale w przyszłości wyda zachowanie niekwalifikowanego wywołania „dump()”
może zmienić.

· Bardzo zakurzone przykłady w katalogu eg/ zostały usunięte. Propozycje na nowe
błyszczące przykłady mile widziane, ale głównym problemem jest to, że przykłady muszą być udokumentowane,
przetestowane i (co najważniejsze) konserwowane.

· (Fałszywe) sekwencje specjalne \8 i \9 dają teraz opcjonalne ostrzeżenie („Nierozpoznany
escape pass through"). Nie ma potrzeby stosowania \-escape żadnego znaku "\w".

· *glob{FILEHANDLE} jest przestarzałe, zamiast tego użyj *glob{IO}.

· Paczka;" składnia („pakiet” bez argumentu) została uznana za przestarzałą. Jego
semantyka nigdy nie była tak jasna, a jej implementacja jeszcze mniej. Jeśli korzystałeś
ta funkcja, aby uniemożliwić wszystkie zmienne oprócz w pełni kwalifikowanych, „użyj ścisłej”; Zamiast.

· Niezaimplementowane funkcje wyrażeń regularnych POSIX [[.cc.]] i [[=c=]] są nadal rozpoznawane, ale
teraz powodują błędy krytyczne. Poprzednie zachowanie polegające na domyślnym ignorowaniu ich i
ostrzeżenie na żądanie było nie do przyjęcia, ponieważ w pewnym sensie fałszywie obiecało, że
funkcje można było wykorzystać.

· W przyszłych wersjach moduły XS nie obsługujące PerlIO mogą stać się całkowicie nieobsługiwane.
Ponieważ PerlIO jest zamiennikiem stdio na poziomie kodu źródłowego, to
nie powinno być aż tak drastycznej zmiany.

· Poprzednie wersje Perla i niektóre odczyty niektórych sekcji Camel III sugerowały to
„:raw” „dyscyplina” była odwrotnością „:crlf”. Wyłączenie „clrfness” nie jest
wystarczająco dłużej, aby strumień był naprawdę binarny. Tak więc warstwa PerlIO „:raw” (lub
„dyscyplina”, używając starszej terminologii z Księgi wielbłądów) jest teraz formalnie zdefiniowana jako
będąc odpowiednikiem binmode (FH) - co z kolei jest definiowane jako robienie tego, co jest
niezbędne do przekazania każdego bajtu bez tłumaczenia. W szczególności binmode (FH)
- i stąd ":raw" - teraz wyłączy i usunie zarówno tłumaczenie CRLF, jak i UTF-8
inne warstwy (np.kodowanie()), który zmodyfikowałby strumień bajtów.

· Obecna, widoczna dla użytkownika implementacja pseudo-hashów (dziwne użycie pierwszego
element tablicy) jest przestarzały począwszy od Perla 5.8.0 i zostanie usunięty w Perlu
5.10.0, a funkcja zostanie zaimplementowana w inny sposób. Nie tylko prąd
interfejs raczej brzydki, ale obecna implementacja spowalnia normalną tablicę i skrót
używać dość zauważalnie. Interfejs pragma „pola” pozostanie dostępny. The
ograniczony hasze interfejs ma być interfejsem zastępczym (patrz
Hash::Util). Jeśli Twoje istniejące programy zależą od podstawowej implementacji,
rozważ użycie Class::PseudoHash z CPAN.

· Składnie "@a->[...]" i "%h->{...}" zostały wycofane.

· Po latach prób suidperl jest uważany za zbyt złożony, aby kiedykolwiek go rozważać
naprawdę bezpieczne. Funkcjonalność suidperl prawdopodobnie zostanie usunięta w przyszłej wersji.

· Model wątków 5.005 (moduł „Wątek”) jest przestarzały i oczekuje się, że zostanie usunięty w
Perl 5.10. Kod wielowątkowy powinien zostać zmigrowany do nowego modelu ithreads (patrz
wątki, wątki::udostępnione i perlthrtut).

· Dawno wycofane wielkie aliasy dla operatorów porównywania łańcuchów (EQ, NE, LT,
LE, GE, GT) zostały teraz usunięte.

· Funkcje tr///C i tr///U zostały usunięte i nie powrócą; Interfejs
był błąd. Przepraszam za to. Aby zapoznać się z podobną funkcjonalnością, zobacz pack('U0', ...) i
pack('C0', ...). [561]

· Wcześniejsze wersje Perla traktowały „sub foo (@bar)” jako odpowiednik „sub foo (@)”. Prototypy
są teraz lepiej sprawdzane w czasie kompilacji pod kątem nieprawidłowej składni. Opcjonalne ostrzeżenie to
wygenerowany („Nielegalna postać w prototypie…”), ale może to zostać ulepszone do fatalnego
błąd w przyszłej wersji.

· Operacje „exec LIST” i „system LIST” generują teraz ostrzeżenia dotyczące skażonych danych i
w niektórych przyszłych wersjach będą generować błędy krytyczne.

· Istniejące zachowanie podczas lokalizowania powiązanych tablic i skrótów jest błędne i takie pozostanie
zmienione w przyszłej wersji, więc nie polegaj na istniejącym zachowaniu. Patrz „Lokalizacja
Powiązane tablice i skróty są zepsute”.

rdzeń Udoskonalenia


Unicode Remont
Ogólnie Unicode powinien być teraz znacznie bardziej użyteczny niż w Perlu 5.6.0 (lub nawet w 5.6.1).
Unicode może być używany w kluczach mieszających, Unicode w wyrażeniach regularnych powinien teraz działać, Unicode
w tr/// powinien teraz działać, Unicode w I/O powinien teraz działać. Zobacz perluniintro dla
wprowadzenie i perlunicode, aby uzyskać szczegółowe informacje.

· Baza danych znaków Unicode dostarczana z Perlem została zaktualizowana do Unicode 3.2.0.
Aby uzyskać więcej informacji, zobacz http://www.unicode.org/ . [561+] (5.6.1 ma UCD 3.0.1.)

· Dla programistów zainteresowanych ulepszeniem możliwości Unicode Perla: prawie wszystkie UCD
pliki są dołączone do dystrybucji Perla w formacie biblioteka/unicore podkatalog. The
najbardziej zauważalnym pominięciem, ze względów przestrzennych, jest baza danych Unihan.

· Dodano właściwości \p{Blank} i \p{SpacePerl}. „Puste” jest jak C
jest pusty(), czyli zawiera tylko „poziome spacje” (znak spacji to,
nowej linii nie ma), a „SpacePerl” jest odpowiednikiem „\s” w Unicode (\p{Space}
nie jest, ponieważ zawiera pionowy znak tabulatora, podczas gdy „\s” nie.)

Zobacz „Nowe właściwości Unicode” we wcześniejszej części tego dokumentu, aby uzyskać dodatkowe informacje
zmiany z właściwościami Unicode.

PerlIO is Teraz Opona Domyślnie
· IO jest teraz domyślnie wykonywane przez PerlIO zamiast systemowego "stdio". PerlIO pozwala
„warstwy” do „wciśnięcia” na uchwyt pliku w celu zmiany zachowania uchwytu. Warstwy
można określić w czasie otwarcia za pomocą 3-argumentowej formy otwarcia:

otwórz($fh,'>:crlf:utf8', $ścieżka) || ...

lub na już otwartych uchwytach poprzez rozszerzony „tryb binarny”:

binmode($fh,':kodowanie(iso-8859-7)');

Wbudowane warstwy to: unix (niski poziom odczytu/zapisu), stdio (jak w poprzednich Perlach),
perlio (ponowna implementacja buforowania stdio w sposób przenośny), crlf (robi CRLF
<=> "\n" tłumaczenie jak w Win32, ale dostępne na każdej platformie). Warstwa mmap może być
dostępne, jeśli platforma je obsługuje (głównie Unixy).

Warstwy, które mają być stosowane domyślnie, można określić za pomocą pragmy „open”.

Zobacz „Ulepszenia instalacji i konfiguracji”, aby poznać wpływ PerlIO na twój
nazwa architektury.

· Jeśli Twoja platforma obsługuje widelec(), możesz użyć formy listy „otwarte” dla potoków. Dla
przykład:

otwórz KID_PS, "-|", "ps", "aux" lub zgiń $!;

rozwidla ps(1) polecenie (bez odradzania powłoki, ponieważ jest ich więcej niż trzy
argumenty do otwarty()) i odczytuje swoje standardowe wyjście za pomocą uchwytu pliku „KID_PS”. Widzieć
perlipc.

· Uchwyty plików można oznaczyć jako akceptujące wewnętrzne kodowanie Unicode Perla (UTF-8 lub
UTF-EBCDIC w zależności od platformy) przez pseudowarstwę ":utf8" :

open($fh,">:utf8","Uni.txt");

Uwaga dla użytkowników EBCDIC: pseudowarstwa ":utf8" jest od tego czasu błędnie nazywana
to nie jest UTF-8, co otrzymasz, ale zamiast tego UTF-EBCDIC. Zobacz perlunicode,
utf8 i http://www.unicode.org/unicode/reports/tr16/ po więcej informacji. W
w przyszłych wersjach to nazewnictwo może ulec zmianie. Zobacz perluniintro, aby uzyskać więcej informacji
UTF-8.

· Jeśli twoje zmienne środowiskowe (LC_ALL, LC_CTYPE, LANG) wyglądają tak, jakbyś chciał użyć UTF-8
(dowolna ze zmiennych pasuje do „/utf-?8/i”), twoje uchwyty STDIN, STDOUT, STDERR i
domyślna otwarta warstwa (patrz otwarte) są oznaczone jako UTF-8. (Ta funkcja, podobnie jak inne nowe
funkcje, które łączą Unicode i I/O, działają tylko wtedy, gdy używasz PerlIO, ale to wszystko
domyślny.)

Zauważ, że po tym Perl naprawdę zakłada, że ​​wszystko jest w UTF-8: na przykład if
jakiś uchwyt wejściowy nie jest, Perl prawdopodobnie bardzo szybko będzie narzekał na dane wejściowe
jak ten „Zniekształcony UTF-8 ...”, ponieważ wszelkie stare ośmiobitowe dane nie są legalnym UTF-8.

Uwaga dla autorów kodu: jeśli chcesz umożliwić użytkownikom używanie UTF-8 jako domyślnego
encoding, ale w twoim kodzie nadal znajdują się ośmiobitowe strumienie I/O (takie jak obrazy lub ZIP
pliki), musisz jawnie otwarty() or tryb bin() z „:bytes” (zobacz „otwieranie” w
perlfunc i „binmode” w perlfunc), lub możesz po prostu użyć „binmode(FH)” (miłe dla
kompatybilność wsteczna sprzed wersji 5.8.0).

· Uchwyty plików mogą tłumaczyć kodowanie znaków z/do wewnętrznego formatu Unicode Perla na
odczyt/zapis przez „:kodowanie()" warstwa.

· Uchwyty plików można otwierać w plikach „w pamięci” przechowywanych w skalarach Perla poprzez:

otwórz($fh,'>', \$zmienna) || ...

· Anonimowe pliki tymczasowe są dostępne bez potrzeby „używania FileHandle” lub innych
moduł przez

otwórz($fh,"+>", undef) || ...

To jest dosłowne undef, a nie niezdefiniowana wartość.

iwątki
Nowe wątki interpretera (w skrócie „threads”) implementacja wielowątkowości, wg
Arthur Bergman zastępuje starą implementację „5.005 wątków”. W modelu ithreads
wszelkie udostępnianie danych między wątkami musi być jawne, w przeciwieństwie do modelu, w którym dane
udostępnianie było domniemane. Zobacz wątki i wątki::udostępnione i perlthrtut.

W ramach implementacji ithreads Perl wykorzysta również wszelkie niezbędne i wykrywalne
Reentrant interfejsy libc.

ograniczony Hashes
Ograniczony skrót jest ograniczony do określonego zestawu kluczy, żadne klucze poza zestawem nie mogą być
dodany. Można również ograniczyć poszczególne klucze, aby nie można było ich usunąć, a plik
nie można zmienić wartości. Nie jest wymagana żadna nowa składnia: moduł Hash::Util to
berło.

Bezpieczne Sygnały
Perl był delikatny, ponieważ sygnały docierające w nieodpowiednich momentach mogły ulec uszkodzeniu
Stan wewnętrzny Perla. Teraz Perl odkłada obsługę sygnałów, dopóki nie będzie to bezpieczne (między
kody operacji).

Ta zmiana może mieć zaskakujące skutki uboczne, ponieważ sygnały nie zakłócają już Perla
natychmiast. Perl teraz najpierw dokończy to, co robił, na przykład kończenie wewnętrznego
operacja (np sortować()) lub operacja zewnętrzna (taka jak operacja we/wy) i tylko wtedy
spójrz na wszelkie nadchodzące sygnały (i przed rozpoczęciem następnej operacji). Nigdy więcej korupcji
stan wewnętrzny, ponieważ bieżąca operacja jest zawsze kończona jako pierwsza, ale sygnał może
poświęć więcej czasu, aby zostać wysłuchanym. Należy pamiętać, że wyrywanie się z potencjalnie blokujących operacji
powinien jednak nadal działać.

Rozumienie of Liczby
Ogólnie rzecz biorąc, dokonano wielu poprawek w obszarze rozumienia liczb przez Perla,
zarówno całkowitych, jak i zmiennoprzecinkowych. Ponieważ w wielu systemach standardowa analiza liczb
funkcje takie jak „strtoul()” i „atof()” wydają się mieć błędy, Perl próbuje obejść ich
braki. Daje to, miejmy nadzieję, dokładniejsze liczby.

Perl próbuje teraz wewnętrznie używać wartości całkowitych w konwersjach numerycznych i podstawowych
arytmetyka (+ - * /), jeśli argumenty są liczbami całkowitymi, i próbuje również zachować wyniki
przechowywane wewnętrznie jako liczby całkowite. Ta zmiana często prowadzi do nieco szybszego i zawsze mniejszego
arytmetyka stratna. (Wcześniej Perl zawsze preferował liczby zmiennoprzecinkowe w swojej matematyce).

Tablice już dziś zawsze interpolować najnowszych podwójnie cytowane smyczki [561]
W łańcuchach ujętych w podwójne cudzysłowy tablice są teraz interpolowane, bez względu na wszystko. Zachowanie opisane wcześniej
wersjach Perla 5 było to, że tablice byłyby interpolowane na łańcuchy, gdyby tablica była
wspomniano przed skompilowaniem łańcucha, w przeciwnym razie Perl wywołałby fatalny błąd kompilacji
błąd czasu. W wersjach od 5.000 do 5.003 błąd wynosił

Dosłowny @example wymaga teraz ukośnika odwrotnego

W wersjach od 5.004_01 do 5.6.0 błąd wynosił

W łańcuchu znak @example teraz musi być zapisany jako \@example

Pomysł polegał na tym, aby wyrobić w ludziach nawyk pisania „fred\@example.com”, kiedy to robią
chcieli dosłownego znaku „@”, tak jak zawsze pisali „Oddaj mi moje 5 $”.
chcieli dosłownego znaku „$”.

Począwszy od wersji 5.6.1, kiedy Perl widzi teraz znak „@” w łańcuchu ujętym w podwójny cudzysłów, zawsze
próbuje interpolować tablicę, niezależnie od tego, czy tablica została użyta, czy nie
zadeklarowane już. Błąd krytyczny został zdegradowany do opcjonalnego ostrzeżenia:

Możliwa niezamierzona interpolacja @example w łańcuchu

To ostrzega, że ​​"fred@example.com” zmieni się w „fred.com”, jeśli tego nie zrobisz
odwrotny ukośnik „@”. Widzieć http://perl.plover.com/at-error.html aby uzyskać więcej informacji na temat
tutaj historia.

Różne Zmiany
· AUTOLOAD jest teraz lvaluable, co oznacza, że ​​możesz dodać atrybut :lvalue do AUTOLOAD
podprogramów i możesz przypisać wartość zwracaną przez AUTOLOAD.

· $Config{kolejność bajtów} (i odpowiadająca jej kolejność bajtów w config.h) była wcześniej błędna
na platformach, jeśli sizeof(long) wynosił 4, ale sizeof(IV) wynosił 8. Kolejność bajtów wynosiła tylko
sizeof(long) bytes long (1234 lub 4321), ale teraz ma poprawną długość sizeof(IV) bajtów,
(12345678 lub 87654321). (Ten problem nie dotyczył platform Windows).

Ponadto $Config{kolejność bajtów} jest teraz obliczana dynamicznie — jest to bardziej niezawodne w przypadku „fat
binarne”, w przypadku gdy obraz wykonywalny zawiera pliki binarne dla więcej niż jednego pliku binarnego
platformy i podczas kompilacji krzyżowej.

· "perl -d:Module=arg,arg,arg" teraz działa (wcześniej nie można było przekazać wielu
argumenty.)

· „do”, po którym następuje słowo kluczowe, zapewnia teraz, że słowo to nie jest słowem kluczowym (aby uniknąć słowa kluczowego).
błąd, w którym „do q(foo.pl)” próbował wywołać podprogram o nazwie „q”). Oznacza to, że dla
przykład zamiast „do format()” musisz napisać „do &format()”.

· Wbudowany wysypisko() teraz daje opcjonalne ostrzeżenie „dump() lepiej napisane jako
CORE::dump()”, co oznacza, że ​​domyślnie „dump(...)” jest rozpoznawane jako wbudowane wysypisko()
który zrzuca rdzeń i przerywa, a nie jako (prawdopodobnie) zdefiniowany przez użytkownika „zrzut podrzędny”. Aby zadzwonić do
po drugie, zakwalifikuj wywołanie jako „&dump(...)”. (Całość wysypisko() funkcja jest do rozważenia
przestarzałe i prawdopodobnie usunięte/zmienione w przyszłych wersjach).

· gryźć() i siekać() są teraz do nadrobienia. Zauważ jednak, że ich prototyp (jak podano
przez „prototype("CORE::chomp")" jest niezdefiniowany, ponieważ nie można go wyrazić i
dlatego tak naprawdę nie można napisać zamienników, aby zastąpić te wbudowane.

· Bloki END są teraz uruchamiane, nawet jeśli wyjdziesz/zginiesz w bloku BEGIN. Wewnętrznie tzw
wykonywanie bloków END jest teraz kontrolowane przez PL_exit_flags i PERL_EXIT_DESTRUCT_END.
Umożliwia to nowe zachowanie osadników języka Perl. To będzie domyślne w 5.10. Widzieć
zakłopotany.

· Formaty obsługują teraz pola dziesiętne wypełnione zerami.

· Chociaż „nie powinieneś tego robić”, możliwe było napisanie kodu zależnego od Perla
zaszyfrowana kolejność kluczy (Data::Dumper to robi). Tworzy nowy algorytm „One-at-a-Time”.
inna zaszyfrowana kolejność kluczy. Więcej szczegółów znajduje się w części „Ulepszenia wydajności”.

· lstat(UCHWYTPLIKU) daje teraz ostrzeżenie, ponieważ operacja nie ma sensu. W przyszłości
wydania, może to stać się błędem krytycznym.

· Fałszywe błędy składniowe generowane w określonych sytuacjach, kiedy kula() spowodował plik::glob
do załadowania po raz pierwszy, zostały naprawione. [561]

· Podprogramy Lvalue mogą teraz zwracać „undef” w kontekście listy. Jednak wartość l
funkcja podprogramu nadal pozostaje eksperymentalna. [561+]

· Utracone ostrzeżenie „Nie można zadeklarować… dereferencji w moim” zostało przywrócone (Perl je miał
wcześniej, ale zaginął w późniejszych wersjach).

· Wprowadzono nową specjalną zmienną wyrażenia regularnego: $^N, która zawiera
ostatnio zamknięta grupa (dopasowanie podrzędne).

· „brak modułu”; nie powoduje błędu, nawet jeśli moduł nie ma pliku nieimportuj()
metoda. Jest to analogiczne do zachowania „użytkowania” w stosunku do „importu”. [561]

· Operatory porównania numerycznego zwracają „undef”, jeśli którykolwiek z operandów jest NaN.
Wcześniej zachowanie było nieokreślone.

· „nasz” może mieć teraz eksperymentalny opcjonalny atrybut „unikatowy”, który wpływa na to, jak globalnie
zmienne są współdzielone przez wielu tłumaczy, zobacz „nasze” w perlfunc.

· Następujące wbudowane funkcje są teraz zastępowalne: każdy(), Klucze(), Muzyka pop(), Pchać(),
Zmiana(), splatać(), cofnij przesunięcie (). [561]

· „pack() / unpack()” może teraz grupować listy szablonów za pomocą „()”, a następnie zastosować
modyfikatory powtórzeń/liczby w grupach.

· „pack() / unpack()” może teraz przetwarzać wewnętrzne typy numeryczne Perla: IV, UV, NV--
a także długie dublety, jeśli są obsługiwane przez platformę. Litery szablonu to „j”,
„J”, „F” i „D”.

· „pack('U0a*', ...)” może być teraz użyte do wymuszenia UTF-8 w łańcuchu.

· mój __PACKAGE__ $obiekt teraz działa. [561]

· POSIX::uśpienie() teraz zwraca liczbę nieprzespane sekund (jak mówi standard POSIX),
w przeciwieństwie do CORE::sen() która zwraca liczbę przespanych sekund.

· printf() i sprintf() obsługuje teraz zmianę kolejności parametrów przy użyciu „%\d+\$” i
Składnie „*\d+\$”. Na przykład

printf "%2\$s %1\$s\n", "foo", "pasek";

wypisze "bar foo\n". Ta funkcja pomaga w pisaniu umiędzynarodowionego oprogramowania i
ogólnie, gdy kolejność parametrów może się różnić.

· Prototyp (\&) działa teraz poprawnie. [561]

· prototype(\[$@%&]) jest teraz dostępne do niejawnego tworzenia referencji (przydatne dla
przykład, jeśli chcesz naśladować wiązanie() berło).

· Dostępna jest nowa opcja wiersza poleceń „-t”. To młodszy brat „-T”:
zamiast umierać z powodu naruszenia skażenia, podawane są ostrzeżenia leksykalne. To zdjęcie is tylko Oznaczało
as a tymczasowy debugowania pomocy Podczas zabezpieczenia dotychczasowy kod of stary dziedzictwo aplikacji. To zdjęcie
is nie a zastąpić dla -T.

· W innych wiadomościach dotyczących skażenia, "exec LIST" i "system LIST" również zostały uwzględnione
ryzykowne (pomyśl „exec @ARGV”: może uruchomić dowolny program z dowolnymi argumentami), a teraz
wspomniane formy powodują ostrzeżenie pod ostrzeżeniami leksykalnymi. Należy dokładnie wyprać
argumenty potwierdzające ich słuszność. W przyszłych wydaniach Perla formularze będą
stają się błędami krytycznymi, więc rozważ rozpoczęcie prania już teraz.

· Wiązane interfejsy mieszające muszą teraz mieć metody EXISTS i DELETE (albo
własne lub odziedziczone).

· Jeśli tr/// tylko zlicza znaki, nie próbuje modyfikować swojego celu.

· rozwiązać() zadzwoni teraz do ROZWIĄZAĆ() hak, jeśli istnieje. Zobacz perltie po szczegóły. [561]

· „utime” w perlfunc obsługuje teraz „utime undef, undef, @files” do zmiany pliku
znaczniki czasu do aktualnego czasu.

· Zasady dopuszczania podkreśleń (podkreśleń) w stałych numerycznych zostały złagodzone
i uproszczone: teraz możesz po prostu mieć podkreślenie pomiędzy cyfry.

· Zamiast polegać na argv[0] C (który może nie zawierać pełnej nazwy ścieżki), gdzie
możliwe $^X jest teraz ustawiane przez zapytanie systemu operacyjnego. (np. czytając /proc/self/exe
na Linuksie, /proc/curproc/plik na FreeBSD)

· Nowa zmienna „${^TAINT}” wskazuje, czy włączony jest tryb skażenia.

· Możesz teraz nadpisać Czytaj linię() wbudowany, a to zastępuje również
operator nawiasów kątowych.

· Opcje wiersza poleceń -s i -F są teraz rozpoznawane w wierszu shebang (#!).

· Użycie modyfikatora dopasowania „/c” bez towarzyszącego mu modyfikatora „/g” powoduje wywołanie nowego
ostrzeżenie: „Użycie modyfikatora /c jest bez znaczenia bez /g”.

Użycie „/c” w podstawieniach, nawet z „/g”, wywołuje „Użycie modyfikatora /c jest
bez znaczenia w s///”.

Użycie „/g” z „split” powoduje „Użycie modyfikatora /g jest bez znaczenia w podziale”.

· Dodano obsługę specjalnego podprogramu „CLONE”. Z ithreads, kiedy nowy
tworzony jest wątek, wszystkie dane Perla są klonowane, jednak dane inne niż Perl nie mogą być klonowane
automatycznie. W „CLONE” możesz zrobić wszystko, co musisz zrobić, na przykład uchwyt
klonowanie danych innych niż Perl, jeśli to konieczne. „CLONE” będzie wykonywane raz na każdy
pakiet, który go zdefiniował lub odziedziczył. Zostanie on nazwany w kontekście nowego
wątek, więc wszystkie modyfikacje są dokonywane w nowym obszarze.

Zobacz perlmod

Moduły i Pragmatyczny


Nowości Moduły i Pragmatyczny
· „Attribute::Handlers”, oryginalnie autorstwa Damiana Conwaya, a obecnie prowadzonym przez Arthura
Bergman pozwala klasie definiować procedury obsługi atrybutów.

pakiet MyPack;
użyj Attribute::Handlers;
sub Wolf :ATTR(SKALAR) { print "wycie!\n" }

# później, w jakimś pakiecie używającym lub dziedziczącym z MyPack...

mój MyPack $Fluffy: Wilk; # zostanie wywołany moduł obsługi atrybutu Wolf

Zarówno zmienne, jak i procedury mogą mieć procedury obsługi atrybutów. Programy obsługi mogą być specyficzne dla
typu (SKALARNY, TABLICOWY, HASZOWY lub KODOWY) lub specyficzny dla konkretnej fazy kompilacji
(BEGIN, CHECK, INIT lub END). Zobacz Atrybut::Programy obsługi.

· „B::Concise” autorstwa Stephena McCamanta to nowy backend kompilatora do chodzenia po Perlu
drzewo składni, drukowanie zwięzłych informacji o ops. Wyjście jest wysoce konfigurowalne. Widzieć
B::Zwięzły. [561+]

· Nowe pragmy bignum, bigint i bigrat firmy Tels implementują przezroczyste bignum
wsparcie (przy użyciu backendów Math::BigInt, Math::BigFloat i Math::BigRat).

· „Class::ISA”, autorstwa Seana Burke'a, to moduł do zgłaszania ścieżki wyszukiwania dla klas
Drzewo ISA. Zobacz Klasa::ISA.

· „Cwd” ma teraz rozdwojenie osobowości: jeśli to możliwe, używane jest rozszerzenie XS (to will
miejmy nadzieję, że będzie szybszy, bezpieczniejszy i bardziej niezawodny), ale jeśli nie jest to możliwe, znajomy
Używana jest implementacja Perla.

· „Devel::PPPort”, pierwotnie autorstwa Kennetha Albanowskiego, a obecnie prowadzony przez Paula Marquessa,
został dodany. Jest używany głównie przez „h2xs” w celu zwiększenia przenośności modułów XS
pomiędzy różnymi wersjami Perla. Zobacz Devel::PPPort.

· „Digest”, moduł frontendowy do obliczania skrótów (sum kontrolnych) firmy Gisle Aas, ma
został dodany. Zobacz podsumowanie.

· „Digest::MD5” do obliczania skrótów MD5 (sum kontrolnych) zgodnie z definicją w RFC 1321, z
Gisle Aas, został dodany. Zobacz Przegląd::MD5.

użyj Digest::MD5 'md5_hex';

$digest = md5_hex("Spragniony wielbłąd");

print $digest, "\n"; # 01d19d9d2045e005c3f1b80e8b164de1

UWAGA: moduł kompatybilności wstecznej „MD5” celowo nie jest dołączony od czasu jego wprowadzenia
dalsze stosowanie jest odradzane.

Zobacz także PerlIO::via::QuotedPrint.

· „Encode”, pierwotnie autorstwa Nicka Ing-Simmonsa, a obecnie utrzymywane przez Dana Kogai, zapewnia
mechanizm tłumaczenia między różnymi kodowaniami znaków. Wsparcie dla Unicode,
ISO-8859-1 i ASCII są wkompilowane w moduł. Kilka innych kodowań (np
reszta ISO-8859, CP*/Win*, Mac, KOI8-R, trzy warianty EBCDIC, chiński,
kodowanie japońskie i koreańskie) są dołączone i mogą być ładowane w czasie wykonywania. (Dla kosmosu
względów, największe chińskie kodowania zostały rozdzielone na własne CPAN
moduł Encode::HanExtra, którego Encode użyje, jeśli będzie dostępny). Zobacz kodowanie.

Każde kodowanie obsługiwane przez moduł Encode jest również dostępne dla „:kodowanie()" warstwa
jeśli używany jest PerlIO.

· "Hash::Util" to interfejs do nowego ograniczony hasze funkcja. (Wprowadzony przez
Jeffrey Friedl, Nick Ing-Simmons i Michael Schwern.) Patrz Hash::Util.

· "I18N::Langinfo" może być użyte do zapytania o informacje o lokalizacji. Patrz I18N::Langinfo.

· „I18N::LangTags” autorstwa Seana Burke'a zawiera funkcje do obsługi języka w stylu RFC3066
tagi. Zobacz I18N::LangTags.

· „ExtUtils::Constant” autorstwa Nicholasa Clarka to nowe narzędzie dla twórców rozszerzeń
generowanie kodu XS do importowania stałych nagłówka C. Zobacz ExtUtils::Constant.

· „Filter::Simple” autorstwa Damiana Conwaya to łatwa w użyciu nakładka na Filter::Util::Call.
Zobacz Filtr::Prosty.

# w MyFilter.pm:

pakiet MójFilter;

użyj Filter::Simple sub {
while (my ($ from, $ to) = splice @_, 0, 2) {
s/$z/$do/g;
}
};

1;

# w kodzie użytkownika:

użyj MyFilter qr/red/ => 'zielony';

drukuj "czerwony\n"; # ten kod jest filtrowany, wypisze "zielony\n"
print "znudzony\n"; # ten kod jest filtrowany, wypisze "bogreen\n"

brak Mojego filtra;

drukuj "czerwony\n"; # ten kod nie jest filtrowany, wypisze "czerwony\n"

· „File::Temp”, autorstwa Tima Jennessa, umożliwia tworzenie tymczasowych plików i katalogów w
łatwy, przenośny i bezpieczny sposób. Zobacz Plik::Temp. [561+]

· „Filter::Util::Call” autorstwa Paula Marquessa zapewnia ramy do pisania
źródło filtry w Perlu. W przypadku większości zastosowań frontend Filter::Simple ma być
preferowane. Zobacz Filtr::Util::Call.

· „if” autorstwa Ilji Zachariewicza to nowa pragma dotycząca warunkowego włączania modułów.

· libnet autorstwa Grahama Barra to zbiór modułów Perl5 związanych z siecią
programowanie. Patrz Net::FTP, Net::NNTP, Net::Ping (nie jest częścią libnet, ale jest powiązany),
Net::POP3, Net::SMTP i Net::Time.

Instalacja Perla pozostawia nieskonfigurowaną bibliotekę libnet; używać libnetcfg aby go skonfigurować.

· „List::Util”, autorstwa Grahama Barra, to wybór podprogramów list ogólnych, takich jak
as suma(), min (), Pierwszy(), człapać(). Zobacz listę::Util.

· „Ustawienia regionalne::Stałe”, „Ustawienia regionalne::Kraj”, „Ustawienia regionalne::Waluta” „Ustawienia regionalne::Język” oraz
Dodano Locale::Script autorstwa Neila Bowersa. Podają kody dla różnych
standardy lokalne, takie jak „fr” dla Francji, „usd” dla dolara amerykańskiego i „ja” dla języka japońskiego.

użyj ustawień regionalnych::Kraj;

$kraj = code2kraj('jp'); # $kraj otrzymuje „Japonię”
$code = country2code('Norwegia'); # kod $ otrzymuje „nie”

Zobacz Ustawienia regionalne:: Stałe, Ustawienia regionalne:: Kraj, Ustawienia regionalne:: Waluta i Ustawienia regionalne:: Język.

· „Locale::Maketext”, autorstwa Seana Burke'a, jest platformą lokalizacyjną. Zobacz Ustawienia regionalne::Maketext,
i Ustawienia regionalne::Maketext::TPJ13. Ten ostatni to artykuł o lokalizacji oprogramowania,
oryginalnie opublikowany w The Perl Journal #13 i ponownie opublikowany tutaj z uprzejmością
pozwolenie.

· „Math::BigRat” dla dużych liczb wymiernych, towarzyszące Math::BigInt i Math::BigFloat,
z Tel. Zobacz Math::BigRat.

· „Memoize” może przyspieszyć twoje funkcje, wymieniając miejsce na czas, od Marka-Jasona
Dominus. Zobacz zapamiętywanie.

· „MIME::Base64”, autorstwa Gisle Aas, umożliwia kodowanie danych w base64, zgodnie z definicją w RFC
2045 - MIM (Różnego przeznaczenia Internet Poczta rozszerzenia).

użyj MIME::Base64;

$encoded = encode_base64('Aladyn: sezamie otwórz');
$dekodowane = decode_base64($kodowane);

print $zakodowane, "\n"; # "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="

Zobacz MIME::Base64.

· „MIME::QuotedPrint”, autorstwa Gisle Aas, pozwala na kodowanie danych w formacie umożliwiającym drukowanie w cudzysłowie
kodowanie, zgodnie z definicją w RFC 2045 - MIM (Różnego przeznaczenia Internet Poczta rozszerzenia).

użyj MIME::QuotedPrint;

$encoded = encode_qp("\xDE\xAD\xBE\xEF");
$dekodowane = dekodowane_qp($kodowane);

print $zakodowane, "\n"; # "=DE=AD=BE=EF\n"
print $dekodowane, "\n"; # "\xDE\xAD\xBE\xEF\n"

Zobacz także PerlIO::via::QuotedPrint.

· „NEXT”, autorstwa Damiana Conwaya, jest pseudoklasą dla metody redysponowania. Zobacz DALEJ.

· "open" to nowa pragma do ustawiania domyślnych warstw I/O dla otwarty().

· „PerlIO::scalar” autorstwa Nicka Ing-Simmonsa zapewnia implementację IO do „w
memory” skalarów Perla, jak omówiono powyżej. Służy również jako przykład ładowalnego
warstwa PerlIO. Inne przyszłe możliwości obejmują PerlIO::Array i PerlIO::Code. Widzieć
PerlIO::skalarny.

· „PerlIO::via”, autorstwa Nicka Ing-Simmonsa, działa jak warstwa PerlIO i otacza warstwę PerlIO
funkcjonalność zapewniana przez klasę (zwykle implementowana w kodzie Perla).

· „PerlIO::via::QuotedPrint” autorstwa Elizabeth Mattijsen jest przykładem „PerlIO::via”
klasa:

użyj PerlIO::przez::QuotedPrint;
open($fh,">:przez(QuotedPrint)",$ścieżka);

Spowoduje to automatyczną konwersję wszystkich danych wyjściowych na $fh do Quoted-Printable. Widzieć
PerlIO::via i PerlIO::via::QuotedPrint.

· Dodano „Pod::ParseLink”, autorstwa Russa Allbery'ego, aby analizować łącza L<> w strąkach jako
opisane w nowym perlpodspec.

· Dodano „Pod::Text::Overstrike” Joe Smitha. Konwertuje dane POD na
sformatowany tekst z przekreśleniem. Zobacz Pod::Text::Overstrike. [561+]

· „Scalar::Util” to wybór skalarnych podprogramów ogólnego użytku, takich jak
błogosławiony(), wpisz ponownie(), skażone(). Zobacz Skalar::Util.

· "sort" to nowa pragma do kontrolowania zachowania sortować().

· "Storable" zapewnia trwałość struktur danych Perla, umożliwiając przechowywanie i
pobieranie danych Perla do iz plików w szybkim i zwartym formacie binarnym. Ponieważ
w efekcie Storable wykonuje serializację struktur danych Perla, dzięki niemu też możesz
klonować głębokie, hierarchiczne struktury danych. Storable został pierwotnie stworzony przez Raphaela
Manfredi, ale teraz jest utrzymywany przez Abhijit Menon-Sen. Możliwość przechowywania została ulepszona
aby zrozumieć dwie nowe funkcje skrótu, klucze Unicode i ograniczone skróty. Widzieć
Przechowywanie.

· Dodano „Switch” Damiana Conwaya. Po prostu mówiąc

użyj przełącznika;

masz „przełącznik” i „przypadek” dostępne w Perlu.

użyj przełącznika;

przełącz ($wartość) {

przypadek 1 { drukuj "numer 1" }
przypadek „a” { drukuj „ciąg a” }
przypadek [1..10,42] { drukuj "liczba na liście" }
przypadek (@tablica) { drukuj „liczba na liście” }
przypadek /\w+/ { drukuj "wzór" }
przypadek qr/\w+/ { drukuj "wzór" }
case (%hash) { print "wpis w hash" }
case (\%hash) { print "wpis w hash" }
case (\&sub) { print "arg do podprogramu" }
else { drukuj "poprzedni przypadek nie jest prawdziwy" }
}

Zobacz przełącznik.

· „Test::More” autorstwa Michaela Schwerna to kolejny framework do pisania skryptów testowych,
bardziej rozbudowany niż Test::Simple. Zobacz Test::Więcej.

· „Test::Simple” autorstwa Michaela Schwerna zawiera podstawowe narzędzia do pisania testów. Widzieć
Test::Prosty.

· Dodano „Text::Balanced” autorstwa Damiana Conwaya w celu wyodrębnienia tekstu rozdzielanego
sekwencje ze stringów.

użyj Text::Balanced „extract_delimited”;

($a, $b) = extract_delimited("'nigdy nie mów nigdy', on nigdy nie powiedział", "'", '');

$a będzie „nigdy nie mów nigdy”, $b będzie „nigdy nie powiedział”.

Oprócz wyodrębnione_rozdzielone(), istnieje również wyciąg_w nawiasach(),
ekstrakt_cytatowy(), wypakuj_blok kodu(), wyciąg_zmiennej(), wyciąg_tagged(),
wyciąg_wielokrotne(), gen_delimited_pat(), gen_extract_tagged(). Z tymi ty
może implementować dość zaawansowane algorytmy analizujące. Zobacz Tekst::Zrównoważony.

· „threads” autorstwa Arthura Bergmana to interfejs do wątków interpretera. Interpretator
Threads (ithreads) to nowy model wątków wprowadzony w Perlu 5.6, ale dostępny tylko
jako wewnętrzny interfejs dla twórców rozszerzeń (i dla Win32 Perl dla „fork()”
współzawodnictwo). Zobacz wątki, wątki::udostępnione i perlthrtut.

· „threads::shared”, autorstwa Arthura Bergmana, umożliwia udostępnianie danych dla wątków interpretera.
Zobacz wątki::udostępnione.

· „Tie::File”, autorstwa Marka-Jasona Dominusa, łączy tablicę Perla z wierszami pliku.
Zobacz Tie::Plik.

· „Tie::Memoize” autorstwa Ilyi Zakharievich udostępnia hasze ładowane na żądanie. Widzieć
Krawat::Zapamiętaj.

· „Tie::RefHash::Nestable”, autorstwa Edwarda Avisa, umożliwia przechowywanie referencji hash (w przeciwieństwie do
standard Tie::RefHash) Moduł jest zawarty w Tie::RefHash. Widzieć
Krawat::RefHash.

· „Time::HiRes”, autorstwa Douglasa E. Wegscheida, zapewnia taktowanie w wysokiej rozdzielczości (ualarm,
usleep i gettimeofday). Zobacz Czas::HiRes.

· "Unicode::UCD" oferuje interfejs zapytań do Bazy Danych Znaków Unicode. Widzieć
Unikod::UCD.

· „Unicode::Collate”, autorstwa SADAHIRO Tomoyuki, implementuje UCA (Unicode Collation
Algorytm) do sortowania ciągów Unicode. Zobacz Unicode::Collate.

· „Unicode::Normalize”, autorstwa SADAHIRO Tomoyuki, implementuje różne kody Unicode
formy normalizacyjne. Zobacz Unicode::Normalizuj.

· „XS::APItest” autorstwa Tima Jennessa to rozszerzenie testowe, które sprawdza interfejsy API XS. Obecnie
testowane jest tylko „printf()”: jak wyprowadzać różne podstawowe typy danych z XS.

· „XS::Typemap”, autorstwa Tima Jennessa, to rozszerzenie testowe, które sprawdza mapy czcionek XS.
Nic nie jest instalowane, ale kod jest wart przestudiowania dla autorów rozszerzeń.

Zaktualizowano oraz Ulepszony Moduły i Pragmatyczny
· Następujące niezależnie obsługiwane moduły zostały zaktualizowane do najnowszych wersji
z CPAN: CGI, CPAN, DB_File, File::Spec, File::Temp, Getopt::Long, Math::BigFloat,
Math::BigInt, pakiet podlatorów (Pod::Man, Pod::Text), Pod::LaTeX [561+],
Pod::Parser, Przechowywanie, Term::ANSIColor, Test, Text-Tabs+Wrap.

· atrybuty::reftype() działa teraz na powiązanych argumentach.

· AutoLoader można teraz wyłączyć za pomocą opcji „no AutoLoader;”.

· B::Deparse zostało znacznie ulepszone przez Robina Houstona. Teraz może odpłynąć
prawie cały standardowy zestaw testów (aby testy nadal się powiodły). Tam jest
ustaw cel „test.deparse”, aby to wypróbować.

· Carp ma teraz lepszą dokumentację interfejsu, a interfejs @CARP_NOT był
dodany, aby uzyskać opcjonalną kontrolę nad tym, gdzie błędy są zgłaszane niezależnie od @ISA, przez
Bena Tilly'ego.

· Class::Struct może teraz definiować klasy w czasie kompilacji.

· Class::Struct przypisuje teraz element tablicy/hash, jeśli akcesor jest wywoływany z an
element tablicy/hash jako słońce argumenty.

· Wartość zwracana przez Cwd::fastcwd() jest teraz skażony.

· Data::Dumper ma teraz opcję sortowania skrótów.

· Data::Dumper ma teraz opcję zrzucania odniesień do kodu za pomocą B::Deparse.

· DB_File obsługuje teraz między innymi nowsze wersje Berkeley DB.

· Devel::Peek ma teraz interfejs do statystyk pamięci Perla (działa tylko wtedy, gdy
używasz malloc Perla i jeśli skompilowałeś z debugowaniem).

· Moduł angielski może być teraz używany bez niesławnego hitu wydajności przez powiedzenie

użyj angielskiego „-no_match_vars”;

(Zakładając oczywiście, że nie potrzebujesz kłopotliwych zmiennych „$`”, $& lub
„$”.) Wprowadzono także angielskie aliasy @LAST_MATCH_START i @LAST_MATCH_END dla
„@-” i „@+”.

· ExtUtils::MakeMaker został znacznie oczyszczony i naprawiony. Udoskonalona wersja
został również przeniesiony do wcześniejszych wersji Perla i przesłany do CPAN, dzięki czemu
wcześniejsze wersje mogą cieszyć się poprawkami.

· Argumenty ZapiszMakefile() w Makefile.PL są teraz sprawdzane pod kątem poczytalności o wiele bardziej
ostrożnie niż wcześniej. Może to spowodować pojawienie się nowych ostrzeżeń podczas instalowania modułów.
Zobacz ExtUtils::MakeMaker, aby uzyskać więcej informacji.

· ExtUtils::MakeMaker używa teraz File::Spec wewnętrznie, co, miejmy nadzieję, prowadzi do poprawy
ruchliwość.

· Fcntl, Socket i Sys::Syslog zostały przepisane przez Nicholasa Clarka, aby używać nowego
sekcja wysyłania stałych stylów (zobacz ExtUtils::Constant). Oznacza to, że będą
być bardziej wytrzymały i miejmy nadzieję szybszy.

· Plik::Znajdź teraz chdir()s poprawnie podczas pogoni za dowiązaniami symbolicznymi. [561]

· File::Find ma teraz wywołania zwrotne przed i po przetwarzaniu. Poprawnie też się zmienia
katalogi podczas pogoni za dowiązaniami symbolicznymi. Wywołania zwrotne (niegrzecznie) wychodzące z „następnym”;
zamiast „powrót”; teraz praca.

· File::Find jest teraz (ponownie) reentrantem. Stał się również bardziej przenośny.

· Ostrzeżenia wydawane przez File::Find now należą do swojej własnej kategorii. Możesz
włącz/wyłącz je za pomocą „użyj/bez ostrzeżeń„ Plik::Znajdź”;”.

· Plik::Glob::glob() został przemianowany na dwa Plik::Glob::bsd_glob() bo nazwa się kłóci
z wbudowanym kula(). Starsza nazwa jest nadal dostępna dla zgodności, ale jest
przestarzałe. [561]

· File::Glob obsługuje teraz stałą „GLOB_LIMIT”, aby ograniczyć rozmiar zwracanej listy
nazw plików.

· IPC::Open3 pozwala teraz na użycie numerycznych deskryptorów plików.

· IO::Socket ma teraz atmark() metoda, która zwraca wartość true, jeśli gniazdo jest ustawione
na znaku poza pasmem. Metodę można również wyeksportować jako plik Sockatmark() funkcja.

· IO::Socket::INET nie może otworzyć określonego portu, jeśli nazwa usługi nie jest znana.
Teraz poprawnie używa podanego numeru portu bez zmian. [561]

· IO::Socket::INET obsługuje opcję ReusePort (jeśli Twoja platforma ją obsługuje).
Opcja Reuse ma teraz alias ReuseAddr. Dla jasności możesz chcieć preferować
Użyj ponownie adresu

· IO::Socket::INET obsługuje teraz wartość zero dla „LocalPort” (zwykle oznacza to, że
system operacyjny to zrobi.)

· 'use lib' działa teraz identycznie jak @INC. Usuwanie katalogów z „no lib” teraz
działa.

· Math::BigFloat i Math::BigInt zostały całkowicie przepisane przez firmę Tels. Są teraz
wielkości szybciej i obsługują różne biblioteki bignum, takie jak GMP i PARI jako
ich zaplecze.

· Math::Complex obsługuje inf, NaN itp., lepiej.

· Net::Ping został znacznie udoskonalony przez Roba Browna: obsługuje teraz multihoming,
Funkcjonalność Win32 jest lepsza, dostępna jest teraz funkcja pomiaru czasu (opcjonalnie
wysokiej rozdzielczości przy użyciu Time::HiRes), a teraz jest używany protokół „zewnętrzny”.
Net::Ping::External moduł, który uruchamia zewnętrzne narzędzie ping i analizuje plik
wyjście. Wersja Net::Ping::External jest dostępna w CPAN.

Należy zauważyć, że niektóre testy Net::Ping są wyłączone podczas uruchamiania w Perlu
dystrybucji, ponieważ nie można założyć jednego lub więcej z poniższych: włączony port echa
na hoście lokalnym, pełna łączność z Internetem lub sympatyczne zapory ogniowe. Możesz ustawić
zmiennej środowiskowej PERL_TEST_Net_Ping na „1” (jeden) przed uruchomieniem testu Perla
suite, aby włączyć wszystkie testy Net::Ping.

· POSIX::sygakcja() jest teraz znacznie bardziej elastyczny i solidny. Możesz teraz zainstalować coderef
programów obsługi, programów obsługi „DEFAULT” i „IGNORE”, instalowanie nowych programów obsługi nie było atomowe.

· W Sejfie, %INC jest teraz zlokalizowane w Bezpiecznym przedziale tak, że użycie/wymaga pracy.

· W SDBM_File na platformach DOSish, niektóre klucze zaginęły z powodu braku wsparcia
dla plików z „dziurami”. Dodano obejście problemu.

· W Search::Dict można teraz skorzystać z funkcji wstępnego przetwarzania przeszukiwanych linii.

· Moduł powłoki ma teraz interfejs OO.

· W Sys::Syslog istnieje teraz mechanizm przełączania awaryjnego, który przejdzie przez alternatywę
mechanizmy połączenia do momentu pomyślnego zarejestrowania wiadomości.

· Moduł Test został znacznie ulepszony.

· Czas::Lokalny::czaslokalny() nie obsługuje już ułamków sekund. Uzasadnieniem jest
to też nie czas lokalny(), lokalny czas() i czas lokalny() powinny być
odwrotności siebie.

· Pragma vars obsługuje teraz deklarowanie w pełni kwalifikowanych zmiennych. (Coś takiego
„nasz()” nie obsługuje i nie będzie obsługiwał.)

· Przestrzeń nazw „utf8::” (jak w pragma) udostępnia różne funkcje wywoływane przez Perla
zapewniają niski poziom dostępu do wewnętrznej reprezentacji Unicode Perla. W tym momencie
tylko długość() Został wdrożony.

Użyteczność Zmiany


· Tryb perla Emacsa (emacs/cperl-mode.el) został zaktualizowany do wersji 4.31.

· emacs/e2ctags.pl jest teraz znacznie szybszy.

· "enc2xs" to narzędzie dla osób dodających własne kodowania do modułu Encode.

· "h2ph" obsługuje teraz trygrafy C.

· "h2xs" tworzy teraz szablon README.

· „h2xs” używa teraz „Devel::PPPort” dla lepszej przenośności między różnymi wersjami
Perła.

· "h2xs" wykorzystuje nowy moduł ExtUtils::Constant, który wpłynie na nowo utworzone
rozszerzenia definiujące stałe. Ponieważ nowy kod jest bardziej poprawny (jeśli masz dwa
stałych, gdzie pierwsza jest przedrostkiem drugiej, pierwszej stałej nigdy
został zdefiniowany), mniej stratny (używa liczb całkowitych dla stałej całkowitej, w przeciwieństwie do starego
kod, który używał liczb zmiennoprzecinkowych nawet dla stałych całkowitych) i nieznacznie
szybciej, warto rozważyć ponowne wygenerowanie kodu rozszerzenia (nowy schemat
ułatwia regenerację). h2xs obsługuje teraz również trygrafy C.

· Dodano "libnetcfg" do konfiguracji libnet.

· „perlbug” jest teraz znacznie bardziej niezawodny. Wysyła również raport o błędzie do perl.org, a nie
perl.com.

· „perlcc” został przepisany, a jego interfejs użytkownika (to znaczy wiersz poleceń) jest znacznie większy
bardziej podobny do kompilatora Unix C, cc. (Narzędzia perlbc zostały usunięte. Użyj
zamiast tego „perlcc -B”.) Note że perlcc is nadal za początku. eksperymentalny i
nieobsługiwane. [561]

· „perlivp” to nowe narzędzie procedury weryfikacji instalacji, które można uruchomić w dowolnym momencie
po zainstalowaniu Perla.

· „piconv” to implementacja narzędzia do konwersji znaków „iconv”,
demonstrując nowy moduł Encode.

· "pod2html" pozwala teraz określić katalog pamięci podręcznej.

· „pod2html” tworzy teraz XHTML 1.0.

· "pod2html" rozumie teraz POD napisane przy użyciu różnych zakończeń linii (podobnie jak w przypadku PC CRLF
w porównaniu z LF typu Unix i CR typu MacClassic).

· "s2p" został całkowicie przepisany w Perlu. (W rzeczywistości jest to pełna implementacja
sed w Perlu: możesz użyć funkcji sed za pomocą narzędzia „psed”.)

· „xsubpp” rozumie teraz dokumentację POD osadzoną w plikach *.xs. [561]

· "xsubpp" obsługuje teraz słowo kluczowe OUT.

Nowości Dokumenty


· perl56delta wyszczególnia zmiany między wersją 5.005 a wersją 5.6.0.

· perlclib dokumentuje wewnętrzne zamienniki standardowych funkcji bibliotecznych C.
(Interesujące tylko dla twórców rozszerzeń i hakerów rdzenia Perla.) [561+]

· perldebtut to samouczek debugowania Perla. [561+]

· perlebcdic zawiera uwagi dotyczące uruchamiania Perla na platformach EBCDIC. [561+]

· perlintro to delikatne wprowadzenie do Perla.

· perliol dokumentuje elementy wewnętrzne PerlIO za pomocą warstw.

· perlmodstyle to przewodnik po stylach pisania modułów.

· perlnewmod informuje o napisaniu i przesłaniu nowego modułu. [561+]

· perlpacktut jest Pakiet() poradnik.

· perlpod został przepisany, aby był bardziej przejrzysty i zawierał zebrane najlepsze praktyki
przez lata.

· perlpodspec jest bardziej formalną specyfikacją formatu pod, głównie dla
pisarzy aplikacji pod, a nie dla osób piszących w pod.

· perlretut to samouczek dotyczący wyrażeń regularnych. [561+]

· perlrequick to przewodnik szybkiego startu dotyczący wyrażeń regularnych. Tak, znacznie szybciej niż
perlretut. [561]

· Perltodo zostało zaktualizowane.

· nazwa perltootc została zmieniona na perltooc (aby nie kolidować z perltoot w
systemy plików ograniczone do nazw „8.3”).

· perluniintro to wprowadzenie do używania Unicode w Perlu. (perlunicode jest bardziej a
szczegółowe informacje referencyjne i ogólne)

· perlutil objaśnia narzędzia wiersza poleceń dołączone do dystrybucji Perla.
[561+]

Następujące dokumenty specyficzne dla platformy są dostępne przed instalacją jako
PRZECZYTAJ.Platforma, a po instalacji jako perlPlatforma:

perlaix perlamiga perlapollo perlbeos perlbs2000
perlce perlcygwin perldgux perldos perlepoc perlfreebsd perlhpux
perlhurd perlirix perlmachten perlmacos perlmint perlmpeix
perlnetware perlos2 perlos390 perlplan9 perlqnx perlsolaris
perltru64 perluts perlvmesa perlvms perlvos perlwin32

Dokumenty te zwykle opisują jeden lub więcej z następujących tematów: konfigurowanie,
budowanie, testowanie, instalowanie, a czasami także używanie Perla na wspomnianej platformie.

Użytkownicy Perla z Azji Wschodniej są teraz mile widziani w ich własnych językach: README.jp (japoński),
README.ko (koreański), README.cn (chiński uproszczony) i README.tw (chiński tradycyjny),
które są napisane w normalnym strąku, ale zakodowane w EUC-JP, EUC-KR, EUC-CN i Big5. Te
zostanie zainstalowany jako

perljp perlko perlcn perltw

· Dokumentacja dla platformy POSIX-BC nosi nazwę „BS2000”, aby uniknąć nieporozumień
z modułem Perla POSIX.

· Dokumentacja dla platformy WinCE nazywa się perlce (README.ce w źródle
code kit), aby uniknąć pomyłki z dokumentacją perlwin32 w wersji 8.3-restricted
systemy plików.

Wydajność Udoskonalenia


· mapa() może stać się patologicznie powolny, gdy lista wyników, którą generuje, jest większa niż
listę źródeł. Poprawiono wydajność dla typowych scenariuszy. [561]

· sortować() jest również w pełni reentrant, w tym sensie, że funkcja sortowania może sama wywołać
sortować(). To nie działało niezawodnie w poprzednich wersjach. [561]

· sortować() został zmieniony, aby używać wewnętrznie głównie mergesort, w przeciwieństwie do
wcześniejsze szybkie sortowanie. W przypadku bardzo małych list może to spowodować nieco wolniejsze sortowanie
razy, ale generalnie przyspieszenie powinno wynosić co najmniej 20%. Dodatkowe bonusy to jest to
najgorsze zachowanie sortować() jest teraz lepszy (w kategoriach informatycznych jest teraz
działa w czasie O(N log N), w przeciwieństwie do najgorszego czasu działania Theta(N**2) szybkiego sortowania
zachowanie) i tyle sortować() jest teraz stabilny (co oznacza, że ​​elementy z identycznymi kluczami
pozostaną uporządkowane tak, jak były przed sortowaniem). Zobacz pragmę „sort” dla
informacje.

Historia bardziej szczegółowo: załóżmy, że chcesz zaserwować sobie mały kawałek Pi.

@cyfry = ( 3,1,4,1,5,9 );

Numeryczne sortowanie cyfr da (1,1,3,4,5,9), zgodnie z oczekiwaniami. Który 1 nadchodzi
pierwszy jest trudny do ustalenia, ponieważ jeden 1 wygląda prawie jak każdy inny. Możesz uważać
to jako całkowicie trywialne lub nieco głębokie. Jeśli jednak chcesz po prostu posortować
parzyste cyfry przed nieparzystymi, to co będzie

sortuj { ($a % 2) <=> ($b % 2) } @cyfry;

dawać? Jedyna parzysta cyfra, 4, będzie pierwsza. Ale co z liczbami nieparzystymi, które
wszystkie są równe? Z algorytmem quicksort używanym do implementacji Perla 5.6 i
wcześniej kolejność wiązań pozostawia się sortowaniu. Tak więc, gdy dodajesz coraz więcej
cyfr liczby Pi, zmieni się kolejność pojawiania się posortowanych cyfr parzystych i nieparzystych.
a dla wystarczająco dużych wycinków liczby Pi algorytm szybkiego sortowania w Perlu 5.8 tego nie zrobi
zwracają te same wyniki, nawet jeśli zostaną ponownie wywołane z tym samym wejściem. Uzasadnienie dla
opiera się to na najgorszym przypadku zachowania quicksort. Jeśli biegasz

sort { $a <=> $b } ( 1 .. $N , 1 .. $N );

(coś, co możesz przybliżyć, jeśli chcesz scalić dwie posortowane tablice za pomocą sortowania),
podwojenie $N nie tylko podwaja czas szybkiego sortowania czwórki To. Quicksort ma
w najgorszym przypadku czas pracy, który może rosnąć jak N**2, tzw kwadratowy zachowanie i może
zdarzają się wzorce, które mogą pojawić się podczas normalnego użytkowania. Nie zauważysz tego za małe
tablice, ale ty będzie zauważ to przy większych tablicach, a możesz nie żyć wystarczająco długo
aby sortowanie zakończyło się na tablicach zawierających milion elementów. Więc szybkie sortowanie 5.8
szyfruje duże tablice przed ich sortowaniem, jako statystyczna obrona przed kwadratowymi
zachowanie. Ale to oznacza, że ​​jeśli dwukrotnie posortujesz tę samą dużą tablicę, powiązania mogą zostać zerwane
na różne sposoby.

Z powodu nieprzewidywalności kolejności rozstrzygania remisów i najgorszego przypadku kwadratowego
zachowanie, szybkie sortowanie było prawie całkowicie zastąpiony stabilnym mergesortem. Stabilny
oznacza, że ​​więzi są zerwane, aby zachować pierwotną kolejność pojawiania się na wejściu
szyk. Więc

sortuj { ($a % 2) <=> ($b % 2) } (3,1,4,1,5,9);

przyniesie (4,3,1,1,5,9), gwarantowane. Na wyjściu pojawiają się liczby parzyste i nieparzyste
w tej samej kolejności, w jakiej pojawiły się na wejściu. Mergesort ma najgorszy przypadek O (N log N)
zachowanie, najlepszą osiągalną wartość. I, jak na ironię, ten mergesort tak robi
szczególnie dobrze tam, gdzie szybkie sortowanie jest kwadratowe: sortowanie przez scalanie (1..$N, 1..$N) w
Na czas. Ale quicksort został uratowany w ostatniej chwili, ponieważ jest szybszy niż
mergesort na niektórych wejściach i platformach. Na przykład, jeśli naprawdę nie który
o kolejności cyfr parzystych i nieparzystych, quicksort będzie działać w czasie O(N); to jest bardzo
dobry w sortowaniu wielu powtórzeń małej liczby odrębnych elementów. The
strategia quicksort dziel i zwyciężaj dobrze sprawdza się na platformach o relatywnie małych,
bardzo szybko, pamięć podręczna. W końcu problem zostaje zredukowany do takiego, który pasuje do
cache, od tego momentu korzysta ze zwiększonej szybkości pamięci.

Quicksort został uratowany przez wdrożenie pragmy sortowania w celu kontrolowania aspektów sortowania.
Opona stabilny subpragma wymusza stabilne zachowanie, niezależnie od algorytmu. The _szybkie sortowanie
i _scal sortowanie subpragmy to ciężkie sposoby na wybranie podłoża
realizacja. Wiodący „_” jest przypomnieniem, że te subpragmy mogą nie przetrwać
poza 5.8. Bardziej odpowiednie mechanizmy wyboru implementacji istnieją, ale
nie przybyliby na czas, by uratować szybkie sortowanie.

· Skróty używają teraz algorytmu klucza mieszającego „jeden po drugim” Boba Jenkinsa (
http://burtleburtle.net/bob/hash/doobs.html ). Ten algorytm jest dość szybki
przy jednoczesnym uzyskaniu znacznie lepszego rozkładu wartości niż stary algorytm mieszający
(oryginalnie autorstwa Chrisa Torka, później zmodyfikowany przez Ilyę Zachariewicza). Dane wyjściowe wartości skrótu
z algorytmu na hash wszystkich 3-znakowych drukowalnych kluczy ASCII jest znacznie bliższy
przejście testów generowania liczb losowych DIEHARD. Według perlbencha, to
zmiana nie wpłynęła na ogólną szybkość Perla.

· cofnij przesunięcie () powinien być teraz zauważalnie szybszy.

instalacja sprzętu i systemu Ulepszenia


Rodzajowy Ulepszenia
· INSTALL wyjaśnia teraz, jak skonfigurować Perla, aby używał 64-bitowych liczb całkowitych nawet na
platformy inne niż 64-bitowe.

· Zmiana polityki Policy.sh: jeśli ponownie używasz pliku Policy.sh (patrz INSTALACJA) i używasz
Skonfiguruj -Dprefix=/foo/bar iw starej polityce $prefix eq $siteprefix i $prefix
eq $vendorprefix, wszystkie zostaną teraz zmienione na nowy przedrostek, /foo/bar.
(Wcześniej zmieniany był tylko prefiks $.) Jeśli nie podoba ci się to nowe zachowanie, określ
prefix, siteprefix i vendorprefix jawnie.

· Dostępna jest nowa opcjonalna lokalizacja bibliotek Perla, otherlibdirs. To może być
używany na przykład dla dodatków dostawców bez zakłócania własnych katalogów bibliotek Perla.

· Na wielu platformach dostarczane przez producenta „cc” jest zbyt uproszczone, aby można było zbudować Perla
(w zasadzie „cc” nie robi ANSI C). Jeśli wydaje się, że tak jest, a „cc” nie
wydaje się być kompilatorem GNU C „gcc”, podejmowana jest automatyczna próba znalezienia i użycia
Zamiast tego „gcc”.

· gcc musi uważnie śledzić wydawanie systemu operacyjnego, aby uniknąć problemów z kompilacją. Jeśli
Configure stwierdzi, że gcc zostało stworzone dla innej wersji systemu operacyjnego niż jest
działa, daje teraz wyraźnie widoczne ostrzeżenie, że mogą wystąpić problemy.

· Ponieważ Perl 5.8 nie jest binarnie kompatybilny z poprzednimi wersjami Perla, Configure no
już sugeruje włączenie modułów 5.005 do @INC.

· Konfiguracja „-S” może teraz działać nieinteraktywnie. [561]

· Skonfiguruj wsparcie dla modeli pamięci w stylu pdp11 zostało usunięte z powodu przestarzałości.
[561]

· configure.gnu działa teraz z opcjami zawierającymi spacje.

· installperl wysyła teraz wszystko do STDERR.

· Ponieważ PerlIO jest teraz domyślnym na większości platform, "-perlio" nie jest dołączane
$Config{archname} (znany również jako $^O). Zamiast tego, jeśli wyraźnie wybierzesz
nie używać perlio (skonfiguruj opcję wiersza poleceń -Uuseperlio), otrzymasz „-stdio”
dołączone.

· Kolejną zmianą związaną z nazwą architektury jest to, że „-64all” (-Duse64bitall lub
„maksymalnie 64-bitowy”) jest dołączany tylko wtedy, gdy wskaźniki mają szerokość 64 bitów. (Byc dokładnym,
use64bitall jest ignorowany.)

· W instalacjach AFS można skonfigurować katalog główny AFS w innym miejscu niż
domyślny /afs za pomocą parametru konfiguracji „-Dafsroot=/some/where/else”.

· Udokumentowano APPLLIB_EXP, mniej znaną definicję czasu konfiguracji. To
może być użyty do dołączenia katalogów specyficznych dla witryny do domyślnej ścieżki wyszukiwania Perla (@INC);
patrz INSTALACJA w celu uzyskania informacji.

· Wersja Berkeley DB używana, gdy Perl (i przypuszczalnie rozszerzenie DB_File)
został zbudowany jest teraz dostępny jako @Config{qw(db_version_major db_version_minor
db_version_patch)} z Perla i jako „DB_VERSION_MAJOR_CFG DB_VERSION_MINOR_CFG
DB_VERSION_PATCH_CFG” z C.

· Budowa Berkeley DB3 dla trybów zgodności dla DB, NDBM i ODBM została
udokumentowane w INSTALL.

· Jeśli masz dostęp CPAN (sieć lub kopia lokalna, taka jak CD-ROM), możesz
podczas określania dodatkowych modułów do skonfigurowania w celu zbudowania i zainstalowania z Perlem przy użyciu
-Dextras=...opcja. Zobacz INSTALUJ, aby uzyskać więcej informacji.

· Oprócz pliku config.over dostępny jest nowy plik zastępujący, config.arch. Ten plik
ma być używany przez twórców plików podpowiedzi do zmian w całej architekturze (w przeciwieństwie do
do config.over, który służy do zmian w całej witrynie).

· Jeśli twój system plików obsługuje dowiązania symboliczne, możesz zbudować Perla poza źródłem
katalog wg

mkdir perl/build/katalog
cd perl/kompilacja/katalog
sh /ścieżka/do/perl/source/Configure -Dmksymlinks ...

Spowoduje to utworzenie w Perl/build/directory drzewa dowiązań symbolicznych wskazujących na pliki
/ścieżka/do/perla/źródła. Oryginalne pliki pozostają nienaruszone. Po tym, jak Configure ma
gotowe, można po prostu powiedzieć

zrób wszystkie testy

a Perl zostanie zbudowany i przetestowany, wszystko w katalogu perl/build/. [561]

· Dla programistów języka Perl udostępniono kilka nowych celów tworzenia profili i debugowania
dodany; patrz perlhack.

· Korzystanie z gprof narzędzie do profilowania Perla zostało udokumentowane w perlhack. Tam
jest celem make o nazwie "perl.gprof" do generowania gprofilowanego Perla
plik wykonywalny.

· Jeśli masz GCC 3, istnieje cel make o nazwie "perl.gcov" do tworzenia
gcoved Perl plik wykonywalny do analizy pokrycia. Zobacz perlhacka.

· Jeśli korzystasz z platform IRIX lub Tru64, dostępne są nowe opcje profilowania/debugowania
został dodany; zobacz perlhack, aby uzyskać więcej informacji na temat pixie i trzeciego stopnia.

· Wytyczne dotyczące tworzenia minimalnych instalacji Perla zostały dodane do INSTALL.

· Rozszerzenie Thread nie jest teraz w ogóle budowane pod ithreads („Configure
-Duseithreads”), ponieważ i tak by nie zadziałało (rozszerzenie Thread wymaga bycia
Skonfigurowany za pomocą „-Duse5005threads”).

Note że dotychczasowy 5.005 threads jest nieobsługiwane i przestarzałe: if ty mieć kod napisany
dla dotychczasowy stary threads ty powinien migrować it do dotychczasowy nowa iwątki model.

· Makro Gconvert ($Config{d_Gconvert}) używane przez perla do tworzenia łańcuchów zmiennoprzecinkowych
Numbers jest teraz bardziej wybredny w używaniu reguł sprintf %.*g do konwersji. Niektóre
platformy, które kiedyś używały gcvt, mogą teraz uciekać się do wolniejszego sprintf.

· Przestarzała metoda tworzenia specjalnego (np. debugowania) smaku perla przez powiedzenie

utwórz LIBPERL=libperld.a

zostało usunięte. Zamiast tego użyj -DDEBUGGING.

Nowości Or Ulepszony Platformy
Aby zapoznać się z listą platform, o których wiadomo, że obsługują język Perl, zobacz „Obsługiwane platformy” w perlport.

· Dynamiczne ładowanie systemu AIX powinno być teraz lepiej obsługiwane.

· AIX powinien teraz działać lepiej z gcc, wątkami i 64-bitowością. Również długie podwójne
wsparcie w AIX powinno być teraz lepsze. Zobacz perlaix.

· AtheOS ( http://www.atheos.cx/ ) to nowa platforma.

· BeOS został odzyskany.

· Platforma DG/UX obsługuje teraz wątki w stylu 5.005. Zobacz perldgux.

· Platforma DYNIX/ptx (znana również jako dynixptx) jest obsługiwana w wersji 4.5.2 lub zbliżonej.

· Platformy EBCDIC (z/OS (znany również jako OS/390), POSIX-BC i VM/ESA) zostały
odzyskane. Wiele testów zestawów testów wciąż kończy się niepowodzeniem, a współistnienie Unicode i EBCDIC
nie jest całkiem ustalona, ​​ale sytuacja jest znacznie lepsza niż w przypadku Perla 5.6. Widzieć
perlos390, perlbs2000 (dla POSIX-BC) i perlvmesa, aby uzyskać więcej informacji. (Uwaga:
obsługa VM/ESA została usunięta w Perlu v5.18.0. Odpowiednie informacje były w
README.vmesa)

· Budowanie Perla z -Duseithreads lub -Duse5005threads działa teraz pod HP-UX 10.20
(wcześniej działał tylko poniżej 10.30 lub później). Będziesz potrzebować biblioteki wątków
pakiet zainstalowany. Zobacz plik README.hpux. [561]

· Mac OS Classic jest teraz obsługiwany w głównym pakiecie źródłowym (MacPerl ma
oczywiście był dostępny od perla 5.004, ale teraz kod źródłowy bazuje na standardowym Perlu
i MacPerl zostały zsynchronizowane) [561]

· Mac OS X (lub Darwin) powinien być teraz w stanie zbudować Perla nawet na systemach plików HFS+. (T
rozróżnianie wielkości liter używane do zmylenia procesu kompilacji Perla).

· NCR MP-RAS jest teraz obsługiwany. [561]

· Wszystkie łatki specyficzne dla NetBSD (z wyjątkiem tych specyficznych dla instalacji) zostały
połączone z powrotem do głównej dystrybucji.

· Obsługiwany jest teraz system NetWare firmy Novell. Zobacz perlnetware.

· NonStop-UX jest teraz obsługiwany. [561]

· NEC SUPER-UX jest teraz obsługiwany.

· Wszystkie łatki specyficzne dla OpenBSD (z wyjątkiem łat specyficznych dla instalacji) zostały
połączone z powrotem do głównej dystrybucji.

· Perl został przetestowany z pakietem wątków GNU pth userlevel (
http://www.gnu.org/software/pth/pth.html ). Wszystkie testy wątków Perla działają teraz, ale
nie bez dodania trochę dawać()s do testów, więc podczas gdy pth (i inny userlevel
implementacje wątków) można uznać za „działające” z wątkami Perla, trzymaj się
pamiętaj o możliwej niewywłaszczalności podstawowej implementacji wątku.

· Stratus VOS jest teraz obsługiwany przy użyciu natywnej metody budowania Perla (Configure). To jest
zalecana metoda budowania Perla na VOS. Starsze metody budujące miniperl,
są nadal dostępne. Zobacz perlvos. [561+]

· Platforma mainframe Amdahl UTS Unix jest teraz obsługiwana. [561]

· WinCE jest teraz obsługiwane. Zobacz perlce.

· z/OS (wcześniej znany jako OS/390, wcześniej znany jako MVS OE) obsługuje teraz dynamiczne
Ładowanie. Ta opcja nie jest wybrana domyślnie, jednak należy określić opcję -Dusedl w pliku
argumenty Konfiguruj. [561]

Salected Bug Fixes


Wykryto liczne wycieki pamięci i niezainicjowane dostępy do pamięci. Bardzo
co ważne, anonimowe subskrypcje dość często przeciekały. [561]

· Pragma autouse nie działała dla Multi::Part::Function::Names.

· gość() może powodować zrzuty pamięci w niektórych sytuacjach. Karp był czasami dotknięty
ten problem. W szczególności, gość() teraz zwraca nazwę podprogramu „(nieznany)”
dla podprogramów, które zostały usunięte z tablicy symboli.

· chop(@list) w kontekście listy zwróciło posiekane znaki w odwrotnej kolejności. Ten
został odwrócony we właściwej kolejności. [561]

· Configure nie zawiera już bibliotek DBM (dbm, gdbm, db, ndbm) podczas budowania
Perlowy plik binarny. Jedynym wyjątkiem jest SunOS 4.x, który ich potrzebuje. [561]

· Zachowanie niedziesiętnych, ale liczbowych stałych łańcuchowych, takich jak „0x23”, było oparte na platformie
zależne: na niektórych platformach było to postrzegane jako 35, na niektórych jako 0, na niektórych jako zmienne
numer punktu (nie pytaj). Było to spowodowane używaniem przez Perla systemu operacyjnego
bibliotek w sytuacji, gdy wynikiem konwersji ciągu znaków na liczbę jest
undefined: teraz Perl konsekwentnie obsługuje takie łańcuchy jak zero w kontekstach numerycznych.

· Kilka poprawek debuggera: kod wyjścia odzwierciedla teraz kod wyjścia skryptu, warunek „0” teraz
traktowane poprawnie, polecenie „d” sprawdza teraz numer wiersza, $. już nie dostaje
uszkodzony, a wszystkie dane wyjściowe debugera są teraz poprawnie przesyłane do gniazda, jeśli RemotePort jest
ustawić. [561]

· Zmodyfikowano debugger (perl5db.pl), aby prezentował bardziej spójne polecenia
interfejs przez (CommandSet=580). Perl5db.t został również dodany w celu przetestowania zmian i as
miejsce na dalsze testy.

Zobacz perldebug.

· Debuger ma nową opcję "dumpDepth" do kontrolowania maksymalnej głębokości, do której zagnieżdżone
konstrukcje są zrzucane. Polecenie „x” zostało rozszerzone, tak że „x N WYRAŻ” jest zrzucane
wartość WYRAŻ maksymalnie do głębokości N poziomach.

· Debuger może teraz wyświetlać zmienne leksykalne, jeśli masz moduł CPAN PadWalker
zainstalowany.

· Kolejność ZNISZCZEŃ stała się bardziej przewidywalna.

· Perl 5.6.0 może emitować fałszywe ostrzeżenia o redefinicji dl_błąd() jeśli chodzi o komunikację i motywację
statyczne budowanie rozszerzeń w perlu. Zostało to poprawione. [561]

· dprofpp -R nie działa.

· *foo{FORMAT} teraz działa.

· Nieskończoność jest teraz rozpoznawana jako liczba.

· UNIVERSAL::isa nie buforuje już niepoprawnie metod. (To zepsuło rozszerzenie Tk
z 5.6.0.) [561]

· Leksykały I: leksykalne poza eval „” nie zostały poprawnie rozwiązane w podprogramie
definition wewnątrz eval „”, jeśli nie były one już przywoływane na najwyższym poziomie
ewaluowany kod.

· Lexicals II: leksykalne wyciekły w zakresie pliku do podprogramów, które zostały wcześniej zadeklarowane
leksykalne.

· Ostrzeżenia leksykalne są teraz poprawnie propagowane między zakresami i do "eval "...".

· „użyj ostrzeżeń qw(FATAL all)” nie działa zgodnie z przeznaczeniem. Zostało to poprawione. [561]

· ostrzeżenia::włączone() teraz poprawnie zgłasza stan $^W, jeśli dzwoniący nie używa
ostrzeżenia leksykalne. [561]

· Zmiana numeracji linii za pomocą eval i "#line" teraz działa. [561]

· Naprawiono liczne wycieki pamięci, szczególnie w eval „”.

· Zlokalizowane powiązane zmienne nie powodują już wycieku pamięci

użyj Tie::Hash;
zawiąż mój %tied_hash => 'Tie::StdHash';

...

# Służy do wycieku pamięci przy każdym wywołaniu funkcji local();
# w pętli, to się sumuje.
lokalny($tied_hash{Foo}) = 1;

· Zlokalizowane elementy skrótu (i %ENV) są poprawnie usuwane, aby nie istniały, jeśli tak
nie, zanim zostały zlokalizowane.

użyj Tie::Hash;
zawiąż mój %tied_hash => 'Tie::StdHash';

...

# Jak dotąd nic nie ustawiło elementu FOO

{ local $tied_hash{FOO} = 'Bar' }

# Kiedyś to się drukowało, ale nie teraz.
wypisz "istnieje!\n" jeśli istnieje $tied_hash{FOO};

Jako efekt uboczny tej poprawki, powiązane interfejsy mieszania musi zdefiniuj ISTNIEJE i USUŃ
Metody.

· mkdir() teraz ignoruje końcowe ukośniki w nazwie katalogu, zgodnie z wymogami POSIX.

· Niektóre wersje glibc mają zepsuty modfl(). Wpływa to na kompilacje z
"-Duselongdouble". Ta wersja Perla wykrywa tę usterkę i ma obejście
dla tego. Wiadomo, że wersja glibc 2.2.2 naprawiła błąd modfl() bug.

· Moduł liczb bez znaku już działa (4063328477 % 65535 użyto do zwrócenia 27406,
zamiast 27047). [561]

· Niektóre ostrzeżenia „brak liczby” wprowadzone w wersji 5.6.0 zostały wyeliminowane, aby były bardziej zgodne
5.005. Nieskończoność jest teraz rozpoznawana jako liczba. [561]

· Konwersje liczbowe w niektórych przypadkach nie rozpoznawały prawidłowo zmian wartości ciągu
okoliczności. [561]

· Atrybuty (takie jak :shared) nie działały nasz().

· nasz() zmienne nie spowodują fałszywych ostrzeżeń „Zmienna nie zostanie udostępniona”. [561]

· „nasze” zmienne o tej samej nazwie zadeklarowane w dwóch równorzędnych blokach skutkowały fikcją
ostrzeżenia o „redeklaracji” zmiennych. Problem został rozwiązany.
[561]

· pack "Z" teraz poprawnie kończy łańcuch z "\0".

· Naprawiono procedury związane z hasłami, które w niektórych platformach z hasłami w tle (np. HP-UX) powodowały
getpwent() aby zwrócić co drugi wpis.

· Zmienna środowiskowa PERL5OPT (do przekazywania argumentów wiersza poleceń do Perla) nie
pracować dla więcej niż jednej grupy opcji. [561]

· PERL5OPT z osadzonymi spacjami nie działał.

· printf() nie resetuje już numerycznych ustawień narodowych do „C”.

· „qw(a\\b)” jest teraz analizowane poprawnie jako „a\\b”: to znaczy jako trzy znaki, a nie cztery.
[561]

· poz () nie zwracał prawidłowej wartości w ramach s///ge we wcześniejszych wersjach. To jest teraz
obsługiwane prawidłowo. [561]

· Drukowanie quadów (64-bitowych liczb całkowitych) za pomocą printf/sprintf działa teraz bez q L ll
prefiksy (zakładając, że korzystasz z platformy obsługującej quady).

· Wyrażenia regularne na referencjach i przeciążonych skalarach teraz działają. [561+]

· Magia prawej ręki (GMAGIC) może w wielu przypadkach być konkatenacją ciągów znaków
wzywany zbyt wiele razy.

· skalarny() teraz wymusza kontekst skalarny, nawet jeśli jest używany w kontekście pustki.

· Obsługa SOCKS jest teraz znacznie bardziej niezawodna.

· sortować() argumenty są teraz kompilowane we właściwym kontekście wantarray (były
przypadkowo używając kontekstu sortować() samo). Blok porównania jest teraz uruchamiany
w kontekście skalarnym, a argumenty do sortowania zawsze mają kontekst listowy.
[561]

· Zmieniono klasę znaków POSIX „[[:space:]]” w celu uwzględnienia (bardzo rzadko używanego)
pionowy znak tabulacji. Dodano nową klasę znaków POSIX-ish „[[:blank:]]”, która
oznacza poziomą białą spację (obecnie spację i tabulator).

· Zanieczyszczające zachowanie sprintf() została zracjonalizowana. Nie zanieczyszcza
wynik formatów zmiennoprzecinkowych, dzięki czemu zachowanie jest spójne z zachowaniem
interpolacja ciągów znaków. [561]

· Niektóre przypadki niespójnej propagacji skaz (np. w obrębie wartości mieszania) miały miejsce
stałe.

· Silnik RE znaleziony w Perlu 5.6.0 przypadkowo pesymizował pewne rodzaje prostych
dopasowania wzorcowe. Teraz są one obsługiwane lepiej. [561]

· Wyjście debugowania wyrażeń regularnych (czy to przez "użyj ponownie 'debugowania'" lub przez "-Dr") teraz
wygląda lepiej. [561]

· Dopasowania wielowierszowe, takie jak ""a\nxb\n" =~ /(?!\A)x/m" były błędne. Błąd został
naprawił. [561]

· Użycie $& może w niektórych sytuacjach wywołać zrzut pamięci. Obecnie można tego uniknąć. [561]

· Dopasowania podrzędne przechwycone przez wyrażenia regularne ($1, $2, ...) są teraz bardziej spójne
usuwane, jeśli dopasowanie się nie powiedzie, zamiast pozostawiać w nich fałszywe dane. [561]

· Czytaj linię() na plikach otwartych w trybie „slurp” może zwrócić dodatkowe „” (pusta linia) w
koniec w pewnych sytuacjach. Zostało to poprawione. [561]

· Autowifikacja referencji symbolicznych specjalnych zmiennych opisanych w perlvar (as
w „${$num}”) został przypadkowo wyłączony. To znowu działa. [561]

· Sys::Syslog zignorował stałą "LOG_AUTH".

· AUTOMATYCZNE ŁADOWANIE $, sortować(), zamek()i tworzenie podprocesów w wielu wątkach
jednocześnie są teraz bezpieczne dla wątków.

· Metoda Tie::Array SPLICE została złamana.

· Zezwól na ciąg tylko do odczytu po lewej stronie niemodyfikującego tr///.

· Jeśli „STDERR” jest remisowy, ostrzeżenia spowodowane przez „ostrzeżenie” i „zginąć” teraz poprawnie przechodzą do niego.

· Kilka poprawek Unicode.

· BOM (znaki kolejności bajtów) na początku plików Perla (skrypty, moduły)
powinien być teraz w przejrzysty sposób pomijany. Pliki Perla z kodowaniem UTF-16 i UCS-2
należy teraz odczytać poprawnie.

· Tabele znaków zostały zaktualizowane do Unicode 3.2.0.

· Porównywanie z danymi utf8 nie aktualizuje magicznie danych innych niż utf8 do utf8.
(To był problem na przykład, jeśli mieszałeś dane z I/O i Unicode
data: twoje dane wyjściowe mogły zostać magicznie zakodowane jako UTF-8.)

· Generowanie nielegalnych punktów kodu Unicode, takich jak U+FFFE lub UTF-16
surogatów, teraz generuje również opcjonalne ostrzeżenie.

· „IsAlnum”, „IsAlpha” i „IsWord” odpowiadają teraz wielkością liter.

· Konkatenacja z „.” operatora lub poprzez interpolację zmiennej, „eq”,
„substr”, „reverse”, „quotemeta”, operator „x”, podstawienie na „s///”,
pojedynczego cudzysłowu UTF-8, powinien teraz działać.

· Operator "tr///" teraz działa. Zauważ, że funkcja „tr///CU” ma
został usunięty (ale patrz pack('U0', ...)).

· "eval "v200"" teraz działa.

· Perl 5.6.0 niepoprawnie analizował m/\x{ab}/, co prowadziło do fałszywych ostrzeżeń. Ten
Zostało poprawione. [561]

· W klasach Unicode, takich jak „IsDigit”, brakowało wpisów zerowych.

· Duże liczby bez znaku (powyżej 2**31) mogą czasami utracić swój brak znaku,
powodując fałszywe wyniki w operacjach arytmetycznych. [561]

· Parser Perla został przetestowany w warunkach skrajnych przy użyciu losowych danych wejściowych i łańcuchów Markowa
a kilka znalezionych awarii i blokad zostało naprawionych.

Platforma Konkretny Zmiany i Fixes
· BSDI 4.*

Perl działa teraz na systemach BSD/OS po wersji 4.0.

· Wszystkie BSD

Ustawienie 0 $ teraz działa (na tyle, na ile to możliwe; szczegóły w perlvar).

· Cygwin

Liczne aktualizacje; obecnie zsynchronizowany z Cygwin 1.3.10.

· Poprzednio DYNIX/ptx miał problemy z sondą Configure dla nieblokujących wejść/wyjść.

· EPOC

EPOC jest teraz lepiej obsługiwane. Zobacz plik README.epoc. [561]

· FreeBSD 3.*

Perl działa teraz na systemach FreeBSD po wersji 3.0.

· HP-UX

Zaktualizowano plik README.hpux; „Konfiguruj -Duse64bitall” teraz działa; teraz używa malloc HP-UX
zamiast Perla malloca.

· IRIX

Liczne ulepszenia flag kompilacji i podpowiedzi; przypadkowe zmieszanie 32-bitowych i
Biblioteki 64-bitowe (próba skazana na niepowodzenie) stały się znacznie trudniejsze.

· Linuxa

· Długie dublety powinny teraz działać (patrz INSTALACJA). [561]

· Linux miał wcześniej problemy związane z sockaddrlen podczas używania zaakceptować(),
recvod() (w Perlu: recv ()), pobierz nazwę użytkownika(), pobrana nazwa().

· Klasyczny system Mac OS

Kompilacja standardowej dystrybucji Perla w Mac OS Classic powinna teraz działać, jeśli ty
mieć środowisko programistyczne Metrowerks i brakujące bity zestawu narzędzi dla komputerów Mac.
Skontaktuj się z listą mailingową macperl, aby uzyskać szczegółowe informacje.

· MPE/IX

Aktualizacja MPE/iX po Perlu 5.6.0. Zobacz plik README.mpeix. [561]

· NetBSD/threads: spróbuj zainstalować pth GNU (powinno być w kolekcji pakietów lub
http://www.gnu.org/software/pth/) i Konfiguruj za pomocą -Duseithreads.

· NetBSD/sparc

Perl działa teraz na NetBSD/sparc.

· OS/2

Teraz działa z usethreads (patrz INSTALACJA). [561]

· Solarisy

64-bitowość przy użyciu kompilatora Sun Workshop już działa.

· Stratus VOS

Natywna metoda kompilacji wymaga co najmniej wersji VOS 14.5.0 i narzędzi GNU C++/GNU
2.0.1 lub nowszy. Funkcja pakietu Perla odwzorowuje teraz przepełnione wartości na +nieskończoność i
niedopełnione wartości do -nieskończoności.

· Tru64 (aka Digital UNIX, inaczej DEC OSF/1)

Litera wersji systemu operacyjnego jest teraz zapisana w $Config{osvers}. Zezwól na kompilację
z gcc (wcześniej wyraźnie zabronione). Kompilowanie z gcc nadal nie jest zalecane
ponieważ kod zawiera błędy, nawet z gcc 2.95.2.

· Unikos

Naprawiono różne problemy z wyrównaniem, które prowadziły do ​​zrzutów pamięci podczas kompilacji lub
później; nie umiera już z powodu błędów matematycznych w czasie wykonywania; teraz używając pełnych liczb całkowitych quad (64
bitów), poprzednio używał tylko 46-bitowych liczb całkowitych dla szybkości.

· VMS

Zobacz „Dynamiczne rozszerzenie gniazda w systemie VMS” i „Domyślne ustawienie zmiennoprzecinkowe w formacie IEEE włączone
OpenVMS Alpha” dla ważnych zmian, które nie zostały tutaj wymienione.

chdir() teraz działa lepiej pomimo błędu CRT; działa teraz z MULTIPLICITY (patrz INSTALACJA);
teraz działa z malloc Perla.

Skażenie elementów %ENV za pomocą „kluczy” lub „wartości” nie było wcześniej zaimplementowane. To
teraz działa zgodnie z dokumentacją.

Udoskonalono emulację „waitpid”. Najgorszy błąd (teraz naprawiony) polegał na tym, że plik pid
wartości -1 spowodowałoby przeszukanie wszystkich procesów w systemie za pomocą symboli wieloznacznych.

Sygnały w stylu POSIX są teraz emulowane znacznie lepiej w wersjach VMS wcześniejszych niż 7.0.

Funkcja „system” i operator backticks mają ulepszoną funkcjonalność i są lepsze
obsługa błędów. [561]

Testy dostępu do plików wykorzystują teraz bieżące uprawnienia procesu zamiast domyślnych uprawnień użytkownika
uprawnień, co czasami może skutkować niezgodnością między zgłoszonym dostępem a
faktyczny dostęp. To ulepszenie jest dostępne tylko w systemie VMS w wersji 6.0 i nowszych.

Istnieje nowa implementacja „kill” oparta na „sys$sigprc”, która umożliwia starszy VMS
systemy (sprzed 7.0) używały „zabicia” do wysyłania sygnałów, zamiast po prostu wymuszać wyjście. Ten
implementacja pozwala również późniejszym systemom wywoływać „zabicie” z poziomu procedury obsługi sygnału.

Iteracyjne tłumaczenia nazw logicznych są teraz ograniczone do 10 iteracji naśladując
POKAŻ LOGICZNE i inne udogodnienia OpenVMS.

· Okna

· Obsługa sygnału działa teraz lepiej niż kiedyś. Jest teraz realizowany za pomocą
pętli komunikatów systemu Windows, dzięki czemu jest mniej podatny na przypadkowe awarie.

· widelec() emulacja jest teraz bardziej niezawodna, ale wciąż jest ich kilka
ezoteryczne błędy i zastrzeżenia. Zobacz perlfork po szczegóły. [561+]

· Nieudane (pseudo)fork zwraca teraz undef i ustawia errno na EAGAIN. [561]

· Następujące moduły działają teraz w systemie Windows:

ExtUtils::Osadzanie [561]
IO::Rura
IO::Sonda
Sieć::Ping

· IO::Plik::nowy_tmpfile() nie jest już ograniczone do 32767 wywołań na proces.

· Lepsza chdir() wartość zwracana dla nieistniejącego katalogu.

· Kompilowanie języka Perl przy użyciu 64-bitowych narzędzi Platform SDK jest teraz obsługiwane.

· Win32::SetChildShowWindow() wbudowany może służyć do kontrolowania widoczności
okien utworzonych przez procesy potomne. Zobacz Win32, aby uzyskać szczegółowe informacje.

· Nieblokujące oczekiwania na procesy potomne (lub pseudo-procesy) są obsługiwane przez
"waitpid($pid, &POSIX::WNOHANG)".

· Zachowanie system() z wieloma argumentami został zracjonalizowany. Każdy
niecytowany argument zostanie automatycznie zacytowany w celu ochrony białych znaków i dowolnych
istniejące białe znaki w argumentach zostaną zachowane. To poprawia
przenośność systemu (@args) poprzez uniknięcie konieczności używania powłoki „cmd” systemu Windows
specyficzne cytowanie w programach Perla.

Zauważ, że oznacza to, że niektóre skrypty, które mogły polegać na wcześniejszych błędach
zachowanie może nie działać poprawnie. Na przykład "system("nmake /nologo",
@args)” spróbuje teraz uruchomić plik „nmake/nologo” i zakończy się niepowodzeniem, gdy
taki plik nie został znaleziony. Z drugiej strony Perl wykona teraz taki kod
jako „system(”c:/Program Files/MyApp/foo.exe”, @args)” poprawnie.

· Pliki nagłówkowe Perla nie pomijają już typowych ostrzeżeń ze strony Microsoft
Kompilator Visual C++. Oznacza to, że dodatkowe ostrzeżenia mogą się teraz pojawiać, kiedy
kompilacja kodu XS.

· Borland C++ v5.5 jest teraz obsługiwanym kompilatorem, który może budować język Perl. Jednakże,
wygenerowane pliki binarne nadal są niekompatybilne z plikami wygenerowanymi przez
inne obsługiwane kompilatory (GCC i Visual C++). [561]

· Duplikowanie uchwytów gniazd za pomocą open(F, ">&MYSOCK") działa teraz pod Windows 9x.
[561]

· Bieżące wpisy katalogu w %ENV są ​​teraz poprawnie propagowane do elementu potomnego
procesy. [561]

· Nowe wpisy %ENV są ​​teraz propagowane do podprocesów. [561]

· Win32::GetCwd() poprawnie zwraca C:\ zamiast C: w katalogu głównym dysku.
Inne błędy w chdir() i Cwd::cwd() zostały również naprawione. [561]

· Pliki makefile mają teraz domyślnie funkcje włączone w ActiveState ActivePerl (a
popularna dystrybucja binarna Win32). [561]

· Pliki HTML będą teraz instalowane w c:\perl\html zamiast
c:\perl\lib\pod\html

· Klucze REG_EXPAND_SZ są teraz dozwolone w ustawieniach rejestru używanych przez perla. [561]

· Może teraz wysłać() ze wszystkich wątków, nie tylko z pierwszego. [561]

· ExtUtils::MakeMaker używa teraz $ENV{LIB} do wyszukiwania bibliotek. [561]

· Mniejszy stos zarezerwowany na wątek, dzięki czemu więcej wątków może działać jednocześnie.
(Nadal 16M na wątek.) [561]

· „File::Spec->tmpdir()” teraz preferuje C:/temp / Tmp (działa lepiej, gdy perl
działa jako usługa).

· Lepsza obsługa ścieżek UNC w ithreads. [561]

· czekać(), pid(), a kreski wsteczne zwracają teraz poprawny status wyjścia w ramach
Windowsa 9x. [561]

· Wyciek uchwytu gniazda zaakceptować() zostało naprawione. [561]

Nowości or Zmieniono Diagnostyka


Więcej informacji można znaleźć w perldiag.

· Niejednoznaczny zakres w operatorze transliteracji (jak az-9) daje teraz ostrzeżenie.

· chdir("") i chdir(undef) dają teraz ostrzeżenie o deprecjacji, ponieważ powodują
możliwy niezamierzony chdir do katalogu domowego. Mowić chdir() jeśli naprawdę masz na myśli
że.

· Dodano dwie nowe opcje debugowania: jeśli skompilowałeś swój Perl z
debugowania, możesz użyć opcji -DT [561] i -DR do śledzenia tokenizacji i dodawania
liczby odwołań odpowiednio do wyświetlania zmiennych.

· Kategoria ostrzeżeń leksykalnych „przestarzałe” nie jest już podkategorią „składni”
Kategoria. Jest to obecnie sama w sobie kategoria najwyższego poziomu.

· Bez ozdób wysypisko() wyświetli teraz ostrzeżenie sugerujące użycie explicit rdzeniowy::dump() if
o to naprawdę chodzi.

· Ostrzeżenie „Nierozpoznana ucieczka” zostało rozszerzone o „\8”, „\9” i „\_”.
Nie ma potrzeby zmiany znaczenia żadnego ze znaków „\w”.

· Mamy nadzieję, że wszystkie komunikaty o błędach kompilacji wyrażeń regularnych są teraz łatwiejsze
zrozumieć oba, ponieważ komunikat o błędzie pojawia się teraz przed nieudanym wyrażeniem regularnym i
ponieważ punkt awarii jest teraz wyraźnie oznaczony znacznikiem „<--TUTAJ”.

· Różne funkcje wejścia/wyjścia (i gniazda), takie jak tryb bin(), blisko(), i tak dalej, teraz więcej
konsekwentnie ostrzegają, jeśli są używane nielogicznie na jeszcze nieotwartym lub na
już zamknięty uchwyt pliku (lub gniazdo).

· Za pomocą lstat () na uchwycie pliku daje teraz ostrzeżenie. (To bezsensowna rzecz do zrobienia.)

· Opcje "-M" i "-m" teraz ostrzegają, jeśli nie podałeś nazwy modułu.

· Jeśli w "użyciu" określisz wymaganą minimalną wersję, moduły pasujące do nazwy i ale
niezdefiniowanie $VERSION spowoduje błąd krytyczny.

· Korzystanie z przesunięcia ujemnego dla vec() w kontekście lvalue jest teraz ostrzeżeniem.

· Nieparzysta liczba argumentów do przeciążenia::stała wywołuje teraz ostrzeżenie.

· Nieparzysta liczba elementów w anonimowym hashu powoduje teraz wyświetlenie ostrzeżenia.

· Różne ostrzeżenia „otwarte tylko dla”, „przy zamknięciu”, „nigdy nie otwarte” usuwają „główne::”
przedrostek dla uchwytów plików w pakiecie „głównym”, na przykład „STDIN” zamiast
„główny::STDIN”.

· Prototypy podprogramów są teraz dokładniej sprawdzane, na przykład możesz otrzymać ostrzeżenia
jeśli użyłeś nieprototypowych znaków.

· Jeśli zostanie podjęta próba użycia (nie błogosławionego) odniesienia jako indeksu tablicy, pojawi się ostrzeżenie
dany.

· „wciśnij @a;” i „zmień przesunięcie @a;” (bez wartości do przesunięcia lub zmiany przesunięcia) dają teraz ostrzeżenie.
Może to stanowić problem dla wygenerowanego i ocenionego kodu.

· Jeśli spróbujesz „zapakować” w perlfunc liczbę mniejszą niż 0 lub większą niż 255 za pomocą „C”
format otrzymasz opcjonalne ostrzeżenie. Podobnie dla formatu „c” i liczby
mniej niż -128 lub więcej niż 127.

· Pakiet w formacie „P” wymaga teraz wyraźnego rozmiaru.

· unpack "w" ostrzega teraz przed niezakończonymi skompresowanymi liczbami całkowitymi.

· Dodano ostrzeżenia dotyczące korzystania z PerlIO.

· Niektóre modyfikatory wyrażeń regularnych, takie jak „(?o)”, mają sens tylko wtedy, gdy są stosowane do całego wyrażenia regularnego.
Jeśli spróbujesz zrobić inaczej, otrzymasz opcjonalne ostrzeżenie.

· Lookbehind o zmiennej długości nie został jeszcze zaimplementowany, spróbuje go użyć
że.

· Używanie tablic lub skrótów jako referencji (np. „%foo->{bar}” jest przestarzałe od
chwila. Teraz otrzymasz opcjonalne ostrzeżenie.

· Dodano ostrzeżenia dotyczące korzystania z nowej funkcji ograniczonych skrótów.

· Własne powiązania tablic i skrótów nie są obsługiwane, a błędy krytyczne zdarzają się nawet w
próba zrobienia tego.

· Używanie „sortowania” w kontekście skalarnym powoduje teraz wyświetlenie opcjonalnego ostrzeżenia. To nie zadziałało
nic przydatnego, ponieważ sortowanie nie zostało wykonane.

· Użycie modyfikatora /g w rozdzielać() jest bez znaczenia i spowoduje ostrzeżenie.

· Za pomocą splatać() poza końcem tablicy powoduje teraz ostrzeżenie.

· Zniekształcone kodowanie Unicode (UTF-8 i UTF-16) powoduje wiele ostrzeżeń, podobnie jak próby
używać surogatów UTF-16 (które nie są zaimplementowane).

· Próba użycia znaków Unicode w strumieniu I/O bez oznaczania strumienia
kodowanie (za pomocą otwarty() or tryb bin()) spowoduje wyświetlenie ostrzeżeń o szerokich znakach.

· Użycie v-stringów w użyciu/wymaganiu powoduje ostrzeżenie o (wstecznej) przenośności.

· Ostrzeżenia dotyczące używania wątków interpretera i udostępnianych przez nie danych zostały
w dodatku.

Zmieniono Internaliści


· PerlIO jest teraz domyślnym.

· perlapi.pod (dodatek perlguts) próbuje teraz udokumentować wewnętrzne API.

· Możesz teraz zbudować naprawdę minimalnego perla o nazwie microperl. Tworzenie mikroperla nie
wymagają nawet uruchomienia Configure; "make -f Makefile.micro" powinno wystarczyć. Strzec się:
microperl przyjmuje wiele założeń, z których niektóre mogą być zbyt odważne; wynikowy
wykonywalny może ulec awarii lub w inny sposób źle się zachowywać. Dla ostrożnych hakerów
tylko.

· Dodany rsygnał(), który znak(), do_join(), op_clear, op_null, ptr_table_clear(),
ptr_table_free(), sv_setref_uv()i kilka interfejsów UTF-8 do opublikowanego API.
Aby uzyskać pełną listę dostępnych interfejsów API, zobacz perlapi.

· Umożliwiono propagowanie niestandardowych wyjątków za pośrednictwem rechot()ing.

· Teraz xsubs mogą mieć atrybuty tak samo jak subs. (Cóż, przynajmniej wbudowany
atrybuty.)

· dTHR i djSP są przestarzałe; pierwsza usunięta (ponieważ jest to no-op) i
ten ostatni zastąpiony przez dSP.

· PERL_OBJECT został całkowicie usunięty.

· Stałe MAGIC (np. „P”) zostały zmakrofizowane (np. „PERL_MAGIC_TIED”) dla lepszego
czytelność kodu źródłowego i łatwość konserwacji.

· Kompilator wyrażeń regularnych utrzymuje teraz strukturę, która identyfikuje węzły w skompilowanym pliku
kod bajtowy z odpowiednimi cechami składniowymi oryginalnego wyrażenia regularnego.
Informacje są dołączane do nowego elementu „offsets” w „struct regexp”. Widzieć
perldebguts, aby uzyskać pełniejsze informacje.

· Kod C został znacznie bardziej uporządkowany przez "gcc -Wall". Niektóre komunikaty ostrzegawcze nadal
pozostań na niektórych platformach, więc jeśli kompilujesz z gcc, możesz zobaczyć kilka ostrzeżeń
o podejrzanych praktykach. Trwają prace nad ostrzeżeniami.

· perly.c, svc, sv.h zostały już obszernie skomentowane.

· Dodano dokumentację dotyczącą korzystania z repozytorium źródeł Perla
Przenoszenie/repozytorium.pod.

· Obecnie dostępnych jest kilka celów tworzenia profili.

Bezpieczeństwo Wrażliwość Zamknięte [561]


(Ta zmiana została już wprowadzona w wersji 5.7.0, ale warto ją tutaj powtórzyć.) (5.7.0 pojawiła się wcześniej
5.6.1: gałąź programistyczna 5.7 wydana wcześniej niż gałąź konserwacyjna 5.6)

Potencjalną luką w zabezpieczeniach opcjonalnego komponentu suidperl Perla było
zidentyfikowany w sierpniu 2000 r. Suidperl nie jest domyślnie ani budowany, ani instalowany. od
Listopad 2001 jedyną znaną podatną na ataki platformą jest Linux, najprawdopodobniej cały Linux
dystrybucje. CERT oraz różni sprzedawcy i dystrybutorzy zostali powiadomieni o tym
słaby punkt. Widzieć http://www.cpan.org/src/5.0/sperl-2000-08-05/sperl-2000-08-05.txt dla
więcej informacji.

Problem został spowodowany przez Perla, który próbował zgłosić podejrzaną próbę wykorzystania luki w zabezpieczeniach za pomocą
zewnętrzny program, /bin/mail. Na platformach Linux program /bin/mail miał rozszerzenie
nieudokumentowana funkcja, która w połączeniu z suidperlem dawała dostęp do powłoki głównej,
skutkujące poważnym kompromisem zamiast zgłaszania próby wykorzystania exploita. Jeśli nie
masz /bin/mail lub jeśli masz „bezpieczne skrypty setuid” lub jeśli suidperl nie jest zainstalowany,
są bezpieczni.

Funkcja zgłaszania prób wykorzystania exploitów została całkowicie usunięta z Perla 5.8.0 (i
wydanie konserwacyjne 5.6.1 i zostało usunięte również ze wszystkich wydań Perla 5.7), tzw
ta szczególna luka już nie istnieje. Jednak dalsze zabezpieczenia
luki w zabezpieczeniach są niestety zawsze możliwe. Funkcjonalność Suidperl jest najbardziej
prawdopodobnie zostanie usunięty w Perlu 5.10. W każdym razie suidperl powinien być używany tylko przez
ekspertów bezpieczeństwa, którzy dokładnie wiedzą, co robią i dlaczego używają suidperl
zamiast innego rozwiązania, takiego jak Sudo ( patrz http://www.courtesan.com/sudo/ ).

Nowości Testy


Dodano kilka nowych testów, zwłaszcza dla lib i ext podrozdziały. Tam są
obecnie około 69 000 pojedynczych testów (rozłożonych na około 700 skryptów testowych), w regresji
pakiet (5.6.1 ma około 11 700 testów, w 258 skryptach testowych) Dokładne liczby zależą od
używana platforma i konfiguracja Perla. Wiele nowych testów jest oczywiście wprowadzanych przez
nowe moduły, ale ogólnie Perl jest teraz dokładniej testowany.

Ze względu na dużą liczbę testów uruchomienie pakietu regresji zajmie dużo czasu
dłużej niż kiedyś: spodziewaj się, że pakiet będzie działać 4-5 razy dłużej niż wcześniej
w Perlu 5.6. Na naprawdę szybkiej maszynie możesz mieć nadzieję na ukończenie pakietu w około 6-8
minuty (czas zegara ściennego).

Testy są teraz raportowane w innej kolejności niż we wcześniejszych wersjach Perla. (To się stało
ponieważ skrypty testowe spod t/lib zostały przeniesione, aby były bliżej
biblioteka/rozszerzenie, które testują.)

Znany Problemy


Opona kompilator Zestaw Is Nadal Bardzo Eksperymentalny
Pakiet kompilatorów powoli się poprawia, ale nadal jest wysoce eksperymentalny.
Odradza się używanie w środowiskach produkcyjnych.

Lokalizowanie Związany Tablice i Hashes Is Złamany
lokalna tablica %tied_array;

nie działa tak, jak można by się spodziewać: stara wartość jest przywracana nieprawidłowo. To będzie
zmienione w przyszłej wersji, ale nie wiemy jeszcze, jaka dokładnie będzie nowa semantyka.
W każdym razie zmiana spowoduje uszkodzenie istniejącego kodu, który opiera się na bieżącym (źle zdefiniowanym)
semantyki, więc po prostu unikaj robienia tego ogólnie.

Budowanie Rozszerzenia Czy Fail Bo Of Duże pliki
Wiadomo, że niektóre rozszerzenia, takie jak mod_perl, mają problemy z „dużymi plikami”, wprowadzono zmianę
przez Perla 5.6.0, w którym domyślne przesunięcia plików mają szerokość 64 bitów, jeśli są obsługiwane. Moduły mogą
w ogóle się nie kompilują lub mogą się skompilować i działać niepoprawnie. Obecnie nie ma
dobre rozwiązanie problemu, ale Configure zapewnia teraz odpowiedni plik inny niż duży
ccflags, ldflags, libswanted i libs w mieszaniu %Config (np.
$Config{ccflags_nolargefiles}), aby rozszerzenia, które mają problemy, mogły spróbować
konfigurowanie się bez pliku largefileness. To prawda, że ​​​​nie jest to czyste
rozwiązanie, a rozwiązanie może w ogóle nie działać. Jedną potencjalną porażką jest to, czy jedna
może (lub, jeśli można, czy jest to dobry pomysł) łączyć ze sobą wszystkie pliki binarne z
różne pomysły dotyczące przesunięć plików; wszystko to zależy od platformy.

Modyfikacja $_ Wewnątrz Do(..)
dla (1..5) { $_++ }

działa bez reklamacji. Nie powinno. (Powinieneś być w stanie modyfikować tylko lvalue
elementy wewnątrz pętli.) Możesz zobaczyć prawidłowe zachowanie, zastępując 1..5 przez
1, 2, 3, 4, 5.

mod_perl 1.26 Nie robi Buduj Wraz z Gwintowane Perl
Użyj mod_perl 1.27 lub nowszego.

lib/ftmp-bezpieczeństwo Testy ostrzec 'system możliwie niepewny'
Nie panikować. Zamiast tego przeczytaj sekcję „wykonaj test” w INSTALL.

libwww-perl (LWP) nie baza/data #51
Użyj libwww-perl 5.65 lub nowszej.

PDL nie kilka Testy
Użyj języka PDL 2.3.4 lub nowszego.

Perl_get_sv
Mogą pojawić się błędy, takie jak „Niezdefiniowany symbol „Perl_get_sv”” lub „nie można rozwiązać symbolu
„Perl_get_sv” lub symbolem może być „Perl_sv_2pv”. Prawdopodobnie oznacza to, że
próbując użyć starszej udostępnionej biblioteki Perla (lub rozszerzeń z nią powiązanych) z Perlem
5.8.0 plik wykonywalny. Perl miał kiedyś taki podprogram, ale już tak nie jest.
Sprawdź ścieżkę do biblioteki udostępnionej i wszelkie udostępnione biblioteki Perla w tych katalogach.

Czasami ten problem może również wskazywać na częściową instalację Perla 5.8.0, patrz „Mac OS X
dyld undefined symbols” na przykład i jak sobie z tym poradzić.

Samowiążące Problemy
Samowiązanie tablic i skrótów jest łamane w dość głęboki i trudny do naprawienia sposób. Jako przystanek-
miara luki, aby uniknąć frustracji ludzi z powodu tajemniczych wyników (zrzuty pamięci,
najczęściej), na razie jest to zabronione (nawet przy próbie wystąpi błąd krytyczny).

Zmiana na samowiązanie globów spowodowała, że ​​są one rekurencyjnie odwoływane (patrz: „Two-
Phased Garbage Collection” w perlobj). Będziesz teraz potrzebować wyraźnego rozwiązania, aby zniszczyć a
samoprzylepny glob. To zachowanie może zostać naprawione w późniejszym terminie.

Działa samowiązanie skalarów i elementów IO.

ext/threads/t/libc
Jeśli ten test się nie powiedzie, oznacza to, że twoja biblioteka libc (biblioteka C) nie jest bezpieczna dla wątków. Ten
szczególne testy warunków skrajnych czas lokalny() zadzwoń, aby dowiedzieć się, czy jest bezpieczny dla wątków.
Zobacz perlthrtut, aby uzyskać więcej informacji.

Brak of Wątek (styl 5.005) Testy
Note że wsparcie dla 5.005 stylu gwintowanie is przestarzałe, eksperymentalny i praktycznie
nieobsługiwane. In 5.10, it is spodziewany do be oddalony. You powinien migrować Twój kod do
iwątki.

Wiadomo, że poniższe testy kończą się niepowodzeniem z powodu podstawowych problemów w wątkach 5.005
realizacja. To nie są nowe błędy — Perl 5.005_0x ma te same błędy, ale ich nie ma
mieć te testy

../ext/B/t/xref.t 255 65280 14 12 85.71% 3-14
../ext/List/Util/t/first.t 255 65280 7 4 57.14% 2 5-7
../lib/English.t 2 512 54 2 3.70% 2-3
../lib/FileCache.t 5 1 20.00% 5
../lib/Filter/Simple/t/data.t 6 3 50.00% 1-3
../lib/Filter/Simple/t/filter_only. 9 3 33.33% 1-2 5
../lib/Math/BigInt/t/bare_mbf.t 1627 4 0.25% 8 11 1626-1627
../lib/Math/BigInt/t/bigfltpm.t 1629 4 0.25% 10 13 1628-
1629
../lib/Math/BigInt/t/sub_mbf.t 1633 4 0.24% 8 11 1632-1633
../lib/Math/BigInt/t/with_sub.t 1628 4 0.25% 9 12 1627-1628
../lib/Tie/Plik/t/31_autodefer.t 255 65280 65 32 49.23% 34-65
../lib/autouse.t 10 1 10.00% 4
op/flip.t 15 1 6.67% 15

Jest mało prawdopodobne, aby te awarie zostały naprawione, ponieważ rozważane są wątki w stylu 5.005
zasadniczo złamany. (Zasadniczo dzieje się tak, że konkurujące wątki mogą ulec uszkodzeniu
współdzielony stan globalny, dobrym przykładem jest stan silnika wyrażeń regularnych).

Chronometraż problemy
Następujące testy mogą sporadycznie kończyć się niepowodzeniem z powodu problemów z synchronizacją, na przykład jeśli
system jest mocno obciążony.

t/op/alarm.t
wew/czas/HiRes/HiRes.t
lib/Benchmark.t
lib/Memoize/t/expmod_t.t
lib/Memoize/t/speed.t

W przypadku niepowodzenia spróbuj uruchomić je ręcznie, np

./perl -Ilib ext/Time/HiRes/HiRes.t

Związany/Magiczny Tablica/skrót Elementy Do Nie Autoożywianie
Dla zwykłych tablic „$foo = \$bar[1]” przypisze „undef” do $bar[1] (zakładając, że
nie istniał wcześniej), ale w przypadku wiązanych/magicznych tablic i skrótów taka autowifikacja ma miejsce
się nie wydarzy, ponieważ obecnie nie ma możliwości przechwycenia tworzenia odniesienia. Ten sam
problem dotyczy krojenia nieistniejących indeksów/kluczy powiązanej/magicznej tablicy/hash.

Unicode in pakiet/klasa i podprogram Nazwy robi nie praca
Można mieć Unicode w nazwach identyfikatorów, ale nie w nazwach pakietów/klas lub podprogramów.
Chociaż od Perla 5.8.0 istnieją pewne ograniczone funkcje w tym zakresie, to jest więcej
przypadkowe niż zamierzone; użycie Unicode do wspomnianych celów nie jest obsługiwane.

Jednym z powodów tego niedokończenia jest jego (obecnie) wrodzona nieprzenośność: ponieważ jedno i drugie
nazwy pakietów i nazwy podprogramów mogą wymagać odwzorowania na nazwy plików i katalogów, np
Możliwości Unicode systemu plików stają się ważne - i niestety nie są
przenośne odpowiedzi.

Platforma Konkretny Problemy


AIX
· W przypadku korzystania z rodzimego polecenia make w systemie AIX, zamiast po prostu "make" wydawaj "make all". W
niektóre konfiguracje, o których wiadomo, że te pierwsze fałszywie również próbują uruchomić „make install”.
Alternatywnie możesz chcieć użyć GNU make.

· W systemie AIX 4.2 rozszerzenia języka Perl korzystające z funkcji C++ korzystających ze statyki mogą powodować problemy
w tym, że statyka nie jest inicjowana. W nowszych wersjach systemu AIX tak było
rozwiązany przez połączenie Perla z biblioteką libC_r, ale niestety w AIX 4.2 powiedział
biblioteka ma niejasny błąd, w którym różne funkcje związane z czasem (takie jak czas()
i pobierzporędnia()) zwracają zepsute wartości, dlatego w systemie AIX 4.2 Perl nie jest połączony
przeciwko libC_r.

· vac 5.0.0.0 Może generować błędny kod dla Perla

Kompilator AIX C vac w wersji 5.0.0.0 może generować błędny kod, czego skutkiem jest kilka
losowe testy kończą się niepowodzeniem, gdy są uruchamiane jako część „testu make”, ale gdy testy kończą się niepowodzeniem
prowadzony ręcznie, udaje im się. Sugerujemy aktualizację co najmniej do wersji vac 5.0.1.0
wiadomo, że poprawnie skompilował Perla. „lslpp -L|grep vac.C” powie ci vac
wersja. Zobacz plik README.aix.

· Jeśli budujesz Perla z wątkami, możesz otrzymać ostrzeżenie o kompilacji z pp_sys.c:

"pp_sys.c", linia 4651.39: 1506-280 (W) Przypisywanie argumentów funkcji między typami "unsigned char*" i "const void*" jest niedozwolone.

To jest nieszkodliwe; jest to spowodowane przez getnetbyaddr() i getnetbyaddr_r() mający
nieco inne typy dla ich pierwszego argumentu.

Alfa systemy w stary gccs nie kilka Testy
Jeśli zauważysz, że testy op/pack, op/pat, op/regexp lub ext/Storable zakończyły się niepowodzeniem w systemie Linux/alpha lub
*BSD/Alpha, prawdopodobnie nadszedł czas na uaktualnienie gcc. gccs przed 2.95.3 są zdecydowanie
niewystarczająco dobre, a gcc 3.1 może być jeszcze lepsze. (RedHat Linux/alfa z gcc 3.1
nie zgłaszał żadnych problemów, podobnie jak Linux 2.4.18 z gcc 2.95.4.) (W Tru64 preferowane jest
użyć dołączonego kompilatora C.)

Przyjaciele
Perl 5.8.0 nie działa w AmigaOS. Zepsuł się w pewnym momencie podczas pracy ithreads i
nie mogliśmy znaleźć ekspertów od Amigi, którzy mogliby rozwiązać problemy. Perl 5.6.1 nadal działa
AmigaOS (podobnie jak wersja rozwojowa 5.7.2).

BeOS
Następujące testy zakończyły się niepowodzeniem w wersji 5.8.0 Perl w wersji BeOS Personal 5.03:

t/op/lfs...........................NIEPOWODZENIE w teście 17
t/op/magic...........................NIEPOWODZENIE w teście 24
ext/Fcntl/t/syslfs.................NIEPOWODZENIE w teście 17
ext/File/Glob/t/basic..........NIEPOWODZENIE w teście 3
ext/POSIX/t/sigaction........... NIEPOWODZENIE w teście 13
ext/POSIX/t/waitpid............NIEPOWODZENIE w teście 1

(Uwaga: więcej informacji było dostępnych w CZYTAJ.beos do czasu usunięcia wsparcia dla BeOS
Perla v5.18.0)

Cygwin "niezdolny do przemapować"
Na przykład podczas budowania rozszerzenia Tk dla Cygwin może pojawić się komunikat o błędzie
„nie można przemapować”. Jest to znany problem z Cygwin, a obejście jest szczegółowo opisane w
tutaj: http://sources.redhat.com/ml/cygwin/2001-12/msg00894.html

Cygwin ndbm Testy nie on GRUBY
Można zbudować, ale nie zainstalować (lub przetestować kompilację) pliku NDBM_File w systemach plików FAT.
Instalacja (lub kompilacja) na NTFS działa dobrze. Jeśli ktoś spróbuje przetestować instalację FAT (lub
build) spodziewane są następujące błędy:

../ext/NDBM_File/ndbm.t 13 3328 71 59 83.10% 1-2 4 16-71
../ext/ODBM_File/odbm.t 255 65280 ?? ?? % ??
../lib/AnyDBM_File.t 2 512 12 2 16.67% 1 4
../lib/Memoize/t/errors.t 0 139 11 5 45.45% 7-11
../lib/Memoize/t/tie_ndbm.t 13 3328 4 4 100.00% 1-4
run/fresh_perl.t 97 1 1.03% 91

NDBM_File kończy się niepowodzeniem, a ODBM_File po prostu coredumps.

Jeśli zamierzasz działać tylko w systemie FAT (lub jeśli używasz AnyDBM_File w systemie FAT), uruchom Configure z
-Ui_ndbm i -Ui_dbm opcje zapobiegające budowaniu plików NDBM_File i ODBM_File.

DJGPP Awarie
t/op/stat...........................NIEPOWODZENIE w teście 29
lib/File/Find/t/find.................NIEPOWODZENIE w teście 1
lib/File/Find/t/taint............NIEPOWODZENIE w teście 1
lib/h2xs .........................NIEPOWIĄZANE przy teście 15
lib/Pod/t/eol................. NIEPOWODZENIE w teście 1
lib/Test/Harness/t/strap-analyze.....NIEPOWODZENIE w teście 8
lib/Test/Harness/t/test-harness......NIEPOWODZENIE w teście 23
lib/Test/Simple/t/exit................. NIEPOWODZENIE przy teście 1

Powyższe awarie są znane od wersji 5.8.0 w przypadku natywnych kompilacji z długimi nazwami plików, ale występują
jest jeszcze kilka, jeśli działa pod Dosemu z powodu ograniczeń (i być może błędów) Dosemu:

t/comp/cpp...........................NIEPOWODZENIE w teście 3
t/op/inccode...........................(awaria)

i kilka testów lib/ExtUtils oraz kilkaset błędów Encode/t/Aliases.t, które działają
dobrze z długimi nazwami plików. Więc naprawdę możesz preferować natywne kompilacje i długie nazwy plików.

FreeBSD wybudowany w iwątki zrzuty rdzenia czytanie duży katalogi
Jest to znany błąd we FreeBSD 4.5 readdir_r(), zostało to naprawione we FreeBSD 4.6 (patrz
perlfreebsd (README.freebsd)).

FreeBSD W braku lokalny Testowanie 117 W razie zamówieenia projektu ISO 8859-15 Lokalny
Lokalizacje ISO 8859-15 mogą nie przejść testu lokalizacji 117 we FreeBSD. Jest to spowodowane przez
znaki \xFF (y z diaerezą) i \xBE (Y z dierezą) nie zachowują się poprawnie, gdy
są dopasowywane bez uwzględniania wielkości liter. Najwyraźniej ten problem został naprawiony w najnowszej wersji
wydania FreeBSD. ( http://www.freebsd.org/cgi/query-pr.cgi?pr=34308 )

IRIX nie ext/List/Util/t/shuffle.t or Przekrój::MD5
IRIX z kompilatorem MIPSpro 7.3.1.2m lub 7.3.1.3m może nie przejść testu List::Util
ext/List/Util/t/shuffle.t przez zrzucenie pliku core. Wydaje się, że jest to błąd kompilatora, ponieważ if
skompilowany z gcc nie następuje żaden zrzut pamięci i nie zaobserwowano żadnych błędów we wspomnianym teście
jakąkolwiek inną platformę.

Podobnie budowanie rozszerzenia Digest::MD5 kończyło się niepowodzeniem z komunikatem „*** Termination
kod 139 (bu21)”.

Lekarstwem jest obniżenie poziomu optymalizacji (Configure -Doptimize=-O2).

HP-UX lib/posix Podtest 9 Fails Kiedy LP64-skonfigurowany
Jeśli perl jest skonfigurowany z opcją -Duse64bitall, pomyślny wynik podtestu 10 z
lib/posix może nadejść przed pomyślnym wynikiem podtestu 9, co dezorientuje
test uprzęży tak bardzo, że uważa, że ​​podtest 9 nie powiódł się.

Linux w glibc 2.2.5 nie t/op/int podtest #6 w -Duse64bitint
Jest to znany błąd w glibc 2.2.5 z długimi długimi liczbami całkowitymi. (
http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=65612 )

Linux Wraz z Sfio Fails op/różne Testowanie 48
Brak znanej poprawki.

Mac OS X
Pamiętaj, aby wcześniej ustawić zmienną środowiskową LC_ALL na „C” (setenv LC_ALL C).
uruchomienie „make test”, aby uniknąć wielu ostrzeżeń o uszkodzonych ustawieniach regionalnych systemu Mac OS X.

Wiadomo, że następujące testy zakończyły się niepowodzeniem w systemie Mac OS X 10.1.5 z powodu błędów (starych)
implementacje Berkeley DB zawarte w Mac OS X:

Failed Test Stat Wstat Total Fail Failed Lista nieudanych
-------------------------------------------------- -----------------------
../ext/DB_File/t/db-btree.t 0 11 ?? ?? % ??
../ext/DB_File/t/db-recno.t 149 3 2.01% 61 63 65

Jeśli budujesz na partycji UFS, prawdopodobnie zobaczysz również podtest t/op/stat.t #9
ponieść porażkę. Jest to spowodowane tym, że UFS Darwina nie obsługuje czasu zmiany i-węzła.

Również podtest ext/POSIX/t/posix.t nr 10 kończy się niepowodzeniem, ale na razie jest pomijany, ponieważ
awaria jest winą Apple, a nie Perla (zablokowane sygnały są tracone).

Jeśli skonfigurujesz za pomocą ithreads, ext/threads/t/libc.t nie powiedzie się. Ponownie, to nie jest Perla
błąd — biblioteka libc systemu Mac OS X nie jest bezpieczna dla wątków (w tym konkretnym teście biblioteka czas lokalny()
wywołanie jest uznane za niebezpieczne dla wątków.)

Mac OS X Dyld niezdefiniowany symbole
Jeśli na przykład po zainstalowaniu Perla 5.8.0 otrzymujesz ostrzeżenia o brakujących symbolach

dyld: perl Niezdefiniowane symbole
_perl_sv_2pv
_perl_get_sv

prawdopodobnie masz starą instalację sprzed Perla-5.8.0 (lub jej części) w /Library/Perl
(niezdefiniowane symbole istniały w Perlach wcześniejszych niż 5.8.0). Wydaje się, że z jakiegoś powodu
„make install” nie zawsze całkowicie nadpisuje pliki w /Library/Perl. Możesz
odsuń starą współdzieloną bibliotekę Perla w ten sposób:

cd /Biblioteka/Perl/darwin/CORE
mv libperl.dylib libperlold.dylib

a następnie ponownie wydaj „make install”. Należy zauważyć, że powyższe jest oczywiście bardzo destrukcyjne
dla czegokolwiek używającego /usr/local/bin/Perl. Jeśli to nie pomoże, być może trzeba będzie spróbować
usunięcie wszystkich plików .bundle spod /Library/Perl i ponownie „make install”.

OS / 2 Testowanie Awarie
Wiadomo, że następujące testy zakończyły się niepowodzeniem w systemie OS/2 (dla jasności pokazano tylko awarie,
nie pełne komunikaty o błędach):

../lib/ExtUtils/t/Mkbootstrap.t 1 256 18 1 5.56% 8
../lib/ExtUtils/t/Packlist.t 1 256 34 1 2.94% 17
../lib/ExtUtils/t/basic.t 1 256 17 1 5.88% 14
lib/os2_process.t 2 512 227 2 0.88% 174 209
lib/os2_process_kid.t 227 2 0.88% 174 209
lib/rx_cmprt.t 255 65280 18 3 16.67% 16-18

op/sprintf Testy 91, 129, i 130
Wiadomo, że testy op/sprintf 91, 129 i 130 kończą się niepowodzeniem na niektórych platformach. Przykłady
obejmują dowolną platformę wykorzystującą sfio oraz NonStop-UX firmy Compaq/Tandem.

Wiadomo, że test 91 kończy się niepowodzeniem na QNX6 (nto), ponieważ „sprintf '%e',0” niepoprawnie generuje
0.000000e+0 zamiast 0.000000e+00.

W przypadku testów 129 i 130 uszkodzone platformy nie są zgodne z normą ANSI C: linie
19ff na stronie 134 ANSI X3.159 1989, żeby być dokładnym. (Produkują coś innego niż "1"
i "-1" podczas formatowania 0.6 i -0.6 przy użyciu formatu printf "%.0f"; najczęściej oni
produkują „0” i „-0”.)

SCO
Wiadomo, że testy par gniazd w SCO 3.2v5.0.4 są niezadowalające:

ext/Socket/socketpair.t............Nieudane testy 15-45

Solaris 2.5
Jeśli nadal używasz systemu Solaris 2.5 (inaczej SunOS 5.5), mogą wystąpić awarie (tzw.
test core dumping) w lib/locale.t. Sugerowanym lekarstwem jest ulepszenie Solarisa.

Solaris x86 Fails Testy Wraz z -Duse64bitint
Wiadomo, że następujące testy zakończyły się niepowodzeniem w systemie Solaris x86 z Perlem skonfigurowanym do używania wersji 64-bitowej
liczby całkowite:

ext/Data/Dumper/t/dumper..........NIEPOWODZENIE w teście 268
ext/Devel/Peek/Peek................. NIEPOWODZENIE w teście 7

SUPER UX (NEK SX)
Wiadomo, że następujące testy kończą się niepowodzeniem w SUPER-UX:

op/64bitint...........................NIEPOWODZONE testy 29-30, 32-33, 35-36
op/arith............................ NIEPOWODZONE testy 128-130
op/pack............................ NIEUDANE testy 25-5625
op/pow...........................................
op/taint...........................# msgsnd nie powiodło się
../ext/IO/lib/IO/t/io_poll............Nieudane testy 3-4
../ext/IPC/SysV/ipcsysv..............Nieudane testy 2, 5-6
../ext/IPC/SysV/t/msg............Nieudane testy 2, 4-6
../ext/Socket/socketpair............Nieudane testy 12
../lib/IPC/SysV...........................Nieudane testy 2, 5-6
../lib/warnings...........................Nieudane testy 115-116, 118-119

Awaria operacji/paczki („Nie można skompresować liczb ujemnych w linii op/pack.t 126”) jest poważna
ale jak dotąd nierozwiązany. Wskazuje to na pewne problemy z obsługą znaków w C
kompilator, podobnie jak awarie 64bitint, arith i pow. Większość pozostałych wskazuje na problemy
z SysV IPC.

Termin::ReadKey nie pracujący on Win32
Użyj Term::ReadKey 2.20 lub nowszego.

UNICOS/mk
· Podczas konfiguracji test

Zgadywanie, które symbole definiuje twój kompilator C i preprocesor...

prawdopodobnie zakończy się niepowodzeniem z komunikatami o błędach, takimi jak

CC-20 cc: BŁĄD Plik = try.c, wiersz = 3
Identyfikator „zły” jest niezdefiniowany.

zły przełącznik yylook 79zły przełącznik yylook 79zły przełącznik yylook 79zły przełącznik yylook 79#ifdef A29K
^

CC-65 cc: BŁĄD Plik = try.c, wiersz = 3
W tym miejscu oczekiwany jest średnik.

Jest to spowodowane błędem w narzędziu awk UNICOS/mk. Możesz zignorować błąd,
ale powoduje to niewielki problem: nie można w pełni skorzystać z narzędzia h2ph
(patrz h2ph), którego można użyć do konwersji nagłówków C na biblioteki Perla, głównie kiedyś
w stanie uzyskać dostęp z Perla do stałych zdefiniowanych za pomocą preprocesora C, cpp. Z powodu
powyższy błąd, części przekonwertowanych nagłówków będą niewidoczne. Na szczęście te
dni potrzeba h2ph jest rzadka.

· W przypadku budowania Perla z wątkami interpretera (threads), plik getgrent(), getgrnam(),
getgrgid() funkcje nie mogą zwrócić listy członków grupy z powodu błędu w
wielowątkowa obsługa UNICOS/mk. Oznacza to, że w kontekście listy plik
funkcje zwrócą tylko trzy wartości, a nie cztery.

UTS
Istnieje kilka znanych błędów testowych. (Uwaga: odpowiednie informacje były dostępne w
CZYTAJ.uts do czasu usunięcia obsługi UTS w Perlu v5.18.0)

VOS (Stratus)
Kiedy Perl jest budowany przy użyciu natywnego procesu kompilacji w VOS Release 14.5.0 i GNU C++/GNU
Narzędzia 2.0.1, wszystkie próby testów kończą się niepowodzeniem lub kończą się niepowodzeniem TODO (ignorowane).

VMS
Nie powinno być zgłaszanych niepowodzeń testów z domyślną konfiguracją, chociaż są
liczba testów oznaczonych TODO, które wskazują obszary wymagające dalszego debugowania i/lub przenoszenia
praca.

Win32
W skrzynkach wieloprocesorowych występują pewne problemy z buforowaniem we/wy: może pojawić się część danych wyjściowych
dwa razy.

XML::Parser nie pracujący
Użyj XML::Parser 2.31 lub nowszego.

z/OS (OS/390)
z/OS ma dość dużo niepowodzeń w testach, ale sytuacja jest w rzeczywistości znacznie lepsza niż była
w 5.6.0; po prostu dodano tak wiele nowych modułów i testów.

Failed Test Stat Wstat Total Fail Failed Lista nieudanych
-------------------------------------------------- -------------------------
../ext/Data/Dumper/t/dumper.t 357 8 2.24% 311 314 325 327
331 333 337 339
../ext/IO/lib/IO/t/io_unix.t 5 4 80.00% 2-5
../ext/Storable/t/downgrade.t 12 3072 169 12 7.10% 14-15 46-47 78-79
+110 111-150 161 XNUMX
../lib/ExtUtils/t/Constant.t 121 30976 48 48 100.00% 1-48
../lib/ExtUtils/t/Embed.t 9 9 100.00% 1-9
op/pat.t 922 7 0.76% 665 776 785 832-
834 845
op/sprintf.t 224 3 1.34% 98 100 136
op/tr.t 97 5 5.15% 63 71-74
uni/skład.t 780 6 0.77% 61 169 196 661
710-711

Awarie w dumper.t i downgrade.t są problemami w testach, te w io_unix i
sprintf to problemy w USS (formaty UDP i printf). Pat, tr i spasuj
awarie są prawdziwymi problemami Perla spowodowanymi przez EBCDIC (a w przypadkach pat and fold,
łącząc to z Unicode). Stała i osadzanie są prawdopodobnie problemami w testach
(ponieważ testują zdolność Perla do budowania rozszerzeń i wydaje się, że to działa
w miarę dobrze).

Unicode Wsparcie on EBCDIC Nadal Łaciasty
Chociaż w większości działa, obsługa Unicode nadal ma problemy z platformami EBCDIC. Jeden
takim znanym miejscem są konstrukcje wyrażeń regularnych „\p{}” i „\P{}” dla punktów kodowych
mniej niż 256: „pP” testuje punkty kodowe Unicode, nie wiedząc o EBCDIC.

Widziany In Perl 5.7 Ale Przeminęło Teraz
„Time::Piece” (wcześniej znany jako „Time::Object”) został usunięty, ponieważ uważano, że
nie miał wystarczającej wartości, aby być modułem podstawowym. Nadal jest to jednak przydatny moduł,
i jest dostępny w CPAN.

Perl 5.8 niestety nie rozwija się już na AmigaOS; to zepsuło się przypadkowo w niektórych
punkt. Ponieważ nie ma zbyt wielu dostępnych programistów dla Amigi, nie mogliśmy tego uzyskać
naprawione i przetestowane na czas dla wersji 5.8.0. Perl 5.6.1 nadal działa na AmigaOS (podobnie jak wersja 5.7.2
wersja rozwojowa).

„PerlIO::Scalar” i „PerlIO::Via” (pisane dużymi literami) zostały przemianowane na „PerlIO::scalar” i
„PerlIO::via” (wszystkie małe litery) tuż przed 5.8.0. Głównym powodem było posiadanie wszystkich rdzeni
Warstwy PerlIO mają wszystkie nazwy pisane małymi literami. Na przykład „wtyczki” są nazywane jak zwykle
"PerlIO::przez::cytowany druk".

Nazwy „wątków::udostępnianych::kolejki” i „wątków::udostępnianych::semaforów” zostały zmienione na
„Thread::Queue” i „Thread::Semaphore” tuż przed 5.8.0. Głównym powodem było posiadanie
moduły wątków, aby przestrzegać normalnego nazewnictwa, „Wątek::” („wątki” i „wątki::udostępnione”
same są bardziej podobne do pragmy, wpływają na czas kompilacji, więc pozostają małymi literami).

Raportowanie Błędy


Jeśli znajdziesz coś, co uważasz za błąd, możesz sprawdzić artykuły ostatnio opublikowane na
grupa dyskusyjna comp.lang.perl.misc i baza błędów perla na http://bugs.perl.org/ . Tam
może być również informacją pod adresem http://www.perl.com/ , strona główna Perla.

Jeśli uważasz, że masz niezgłoszony błąd, uruchom plik perlbug program dołączony do
twoje zwolnienie. Pamiętaj, aby ograniczyć swój błąd do małego, ale wystarczającego przypadku testowego. Twój błąd
raport, wraz z wyjściem "perl -V", zostanie wysłany do perlbug@perl.org być
przeanalizowane przez zespół portujący Perla.

Korzystaj z perl58delta online za pomocą usług onworks.net



Najnowsze programy online dla systemów Linux i Windows