InggrisPerancisSpanyol

favorit OnWorks

perl5200delta - Online di Cloud

Jalankan perl5200delta di penyedia hosting gratis OnWorks melalui Ubuntu Online, Fedora Online, emulator online Windows atau emulator online MAC OS

Ini adalah perintah perl5200delta yang dapat dijalankan di penyedia hosting gratis OnWorks menggunakan salah satu dari beberapa workstation online gratis kami seperti Ubuntu Online, Fedora Online, emulator online Windows atau emulator online MAC OS

PROGRAM:

NAMA


perl5200delta - apa yang baru untuk Perl v5.20.0

DESKRIPSI


Dokumen ini menjelaskan perbedaan antara rilis 5.18.0 dan rilis 5.20.0.

Jika Anda memutakhirkan dari rilis sebelumnya seperti 5.16.0, baca dulu perl5180delta,
yang menjelaskan perbedaan antara 5.16.0 dan 5.18.0.

Core tambahan


Eksperimental Subrutin tanda tangan
Sintaks deklaratif untuk membuka daftar argumen ke dalam variabel leksikal. "subfoo ($a,$b)
{...}" memeriksa jumlah argumen dan memasukkan argumen ke dalam variabel leksikal.
Tanda tangan tidak setara dengan idiom yang ada dari "sub foo { my($a,$b) = @_; ... }".
Tanda tangan hanya tersedia dengan mengaktifkan fitur non-default, dan menghasilkan peringatan
tentang menjadi eksperimental. Bentrokan sintaksis dengan prototipe dikelola dengan menonaktifkan
sintaks prototipe pendek ketika tanda tangan diaktifkan.

Lihat "Tanda tangan" di perlsub untuk detailnya.

"sub" sekarang mengambil a "prototipe" atribut
Saat mendeklarasikan atau mendefinisikan "sub", prototipe sekarang dapat ditentukan di dalam a
atribut "prototype" alih-alih di parens mengikuti nama.

Misalnya, "sub foo($$){}" bisa ditulis ulang sebagai "sub foo : prototype($$){}".

More konsisten prototipe menguraikan
Beberapa titik koma dalam prototipe subrutin telah lama ditoleransi dan diperlakukan sebagai
titik koma tunggal. Ada satu kasus di mana ini tidak terjadi. Sebuah subrutin yang
prototipe dimulai dengan "*" atau ";*" dapat memengaruhi apakah kata-kata kosong dianggap sebagai metode
nama atau sub panggilan. Ini sekarang berlaku juga untuk ";;;*".

Spasi telah lama diizinkan di dalam prototipe subrutin, jadi "sub( $ $ )" adalah
ekuivalen dengan "sub($$)", tetapi sampai sekarang telah dihapus ketika subrutin diurai.
Oleh karena itu, spasi adalah tidak diizinkan dalam prototipe yang ditetapkan oleh "Scalar::Util::set_prototype". Sekarang
itu diizinkan, dan parser tidak lagi menghapus spasi. Ini berarti "prototipe
&mysub" mengembalikan prototipe asli, spasi, dan semuanya.

"rand" sekarang kegunaan a konsisten acak jumlah generator
Sebelumnya Perl akan menggunakan generator nomor acak khusus platform, bervariasi antara
libc acak(), acak() or dan48().

Ini berarti bahwa kualitas nomor acak Perl akan bervariasi dari platform ke platform,
dari 15 bit acak() pada Windows hingga 48-bit pada platform POSIX seperti Linux dengan
dan48().

Perl sekarang menggunakan internalnya sendiri dan48() implementasi di semua platform. Ini tidak
membuat "rand" Perl aman secara kriptografis. [perl #115928]

New mengiris sintaksis
Sintaks %hash{...} dan %array[...] baru mengembalikan daftar kunci/nilai (atau indeks/nilai)
berpasangan. Lihat "Irisan Hash Kunci/Nilai" di perldata.

Eksperimental Postfix Dereferensi
Ketika fitur "postderef" berlaku, persamaan sintaksis berikut ditetapkan:
naik:

$sref->$*; # sama dengan ${ $sref } # interpolasi
$aref->@*; # sama dengan @{ $aref } # interpolasi
$href->%*; # sama seperti %{ $href }
$cref->&*; # sama seperti &{ $cref }
$gref->**; # sama seperti *{ $gref }

$aref->$#*; # sama dengan $#{ $aref }

$gref->*{ $slot }; # sama dengan *{ $gref }{ $slot }

$aref->@[ ... ]; # sama dengan @$aref[ ... ] # interpolasi
$href->@{ ... }; # sama dengan @$href{ ... } # interpolasi
$aref->%[ ... ]; # sama dengan %$aref[ ... ]
$href->%{ ... }; # sama dengan %$href{ ... }

Yang ditandai sebagai interpolasi hanya diinterpolasi jika fitur "postderef_qq" terkait adalah
juga diaktifkan. Fitur ini adalah eksperimental dan akan memicu
"experimental::postderef"-kategori peringatan saat digunakan, kecuali jika ditekan.

Untuk informasi lebih lanjut, lihat bagian Sintaks Dereferensi Postfix dari perlref.

Unicode 6.3 sekarang didukung
Perl sekarang mendukung dan dikirimkan dengan Unicode 6.3 (meskipun Perl dapat dikompilasi ulang dengan
rilis Unicode sebelumnya juga). Daftar rinci perubahan Unicode 6.3 ada di
<http://www.unicode.org/versions/Unicode6.3.0/>.

New "\p{Unikode}" reguler ekspresi belt hold milik
Ini adalah sinonim untuk "\p{Any}" dan cocok dengan kumpulan poin kode yang ditentukan Unicode 0 -
0x10FFFF.

Lebih baik 64-bit mendukung
Pada platform 64-bit, fungsi array internal sekarang menggunakan offset 64-bit, memungkinkan Perl
array untuk menampung lebih dari 2**31 elemen, jika Anda memiliki memori yang tersedia.

Mesin ekspresi reguler sekarang mendukung string yang lebih panjang dari 2**31 karakter. [perl
#112790, #116907]

Fungsi PerlIO_get_bufsiz, PerlIO_get_cnt, PerlIO_set_cnt dan PerlIO_set_ptrcnt sekarang
memiliki SSize_t, bukan int, mengembalikan nilai dan parameter.

"menggunakan lokal" sekarang bekerja on UTF-8 lokal
Hingga rilis ini, hanya lokal byte tunggal, seperti seri ISO 8859 yang didukung.
Sekarang, lokal UTF-8 multi-byte yang semakin umum juga didukung. Lokal UTF-8
adalah salah satu di mana set karakter adalah Unicode dan pengkodean adalah UTF-8. POSIX
Operasi kategori "LC_CTYPE" (perubahan huruf besar-kecil (seperti "lc()", "\U"), dan karakter
klasifikasi ("\w", "\D", "qr/[[:punct:]]/")) di bawah lokal seperti itu berfungsi seolah-olah tidak
di bawah lokal, tetapi seolah-olah di bawah "gunakan fitur 'unicode_strings'", kecuali aturan taint
telah diikuti. Penyortiran tetap berdasarkan urutan titik kode dalam rilis ini. [perl #56820].

"menggunakan lokal" sekarang kompilasi on sistem tanpa Lokal kemampuan
Sebelumnya melakukan ini menyebabkan program tidak dapat dikompilasi. Dalam ruang lingkup program
berperilaku seolah-olah di lokal "C". Jadi program yang ditulis untuk platform yang mendukung lokal
dapat berjalan pada platform tanpa lokal tanpa perubahan. Upaya untuk mengubah lokal dari
lokal "C" tentu saja akan gagal.

More Lokal inisialisasi mundur Pilihan
Jika ada kesalahan dengan lokal selama perl start-up, itu segera menyerah dan mencoba
untuk menggunakan lokal "C". Sekarang pertama kali mencoba menggunakan lokal lain yang diberikan oleh lingkungan
variabel, seperti yang dirinci dalam "LINGKUNGAN" di perlllocale. Misalnya, jika "LC_ALL" dan
"LANG" keduanya disetel, dan menggunakan lokal "LC_ALL" gagal, Perl sekarang akan mencoba "LANG"
lokal, dan hanya jika itu gagal, itu akan kembali ke "C". Pada mesin Windows, Perl akan
coba, sebelum menggunakan "C", lokal default sistem jika semua lokal diberikan oleh lingkungan
variabel gagal.

"-DL" runtime Option sekarang menambahkan untuk jiplakan Lokal pengaturan
Ini dirancang untuk pengembang inti Perl untuk membantu dalam bug debugging lapangan mengenai
lokal

-F sekarang menyiratkan -a dan -a menyiratkan -n
Sebelumnya -F tanpa -a adalah larangan, dan -a tanpa -n or -p adalah larangan, dengan ini
berubah, jika Anda menyediakan -F lalu keduanya -a dan -n tersirat dan jika Anda memberikan -a kemudian -n is
tersirat.

Anda masih bisa menggunakan -p untuk perilaku ekstranya. [perl #116190]

$a dan $b peringatan pembebasan
Variabel khusus $a dan $b, yang digunakan dalam "sort", sekarang dikecualikan dari peringatan "digunakan sekali",
bahkan di mana "sort" tidak digunakan. Ini memudahkan modul CPAN untuk menyediakan fungsi
menggunakan $a dan $b untuk tujuan yang sama. [perl #120462]

Security


Menghindari mungkin Baca baca of Gratis()d ingatan selama menguraikan
Itu mungkin Gratis()d memori dapat dibaca selama penguraian yang tidak biasa
keadaan program Perl yang diakhiri dengan heredoc dan baris terakhir file di
disk yang tidak memiliki karakter baris baru yang menghentikan. Ini sekarang telah diperbaiki.

Tidak kompatibel Perubahan


"melakukan" bisa tidak lagi be bekas untuk panggilan subrutin
Formulir "lakukan SUBROUTINE(LIST)" telah menghasilkan peringatan penghentian sejak Perl v5.0.0,
dan sekarang menjadi kesalahan sintaks.

Seperti kutipan melarikan diri perubahan
Karakter setelah "\c" dalam string kutip ganda ("..." atau qq(...)) atau reguler
ekspresi sekarang harus berupa karakter yang dapat dicetak dan tidak boleh berupa "{".

Sebuah literal "{" setelah "\B" atau "\b" sekarang fatal.

Ini tidak digunakan lagi di Perl v5.14.0.

Menodai Terjadi bawah lebih keadaan; sekarang sesuai untuk dokumentasi
Ini memengaruhi pencocokan ekspresi reguler dan mengubah huruf besar/kecil dari string ("lc", "\U",
dll.) dalam lingkup "gunakan lokal". Hasilnya sekarang tercemar berdasarkan operasi,
tidak peduli apa isi string itu, sebagai dokumentasi (perlsec, "SECURITY"
di perlllocale) menunjukkan seharusnya. Sebelumnya, untuk operasi perubahan kasus, jika
string tidak berisi karakter yang perubahan huruf besarnya dapat dipengaruhi oleh lokal, the
hasilnya tidak akan ternoda. Misalnya, hasil dari "uc()" pada string kosong atau satu
hanya berisi poin kode di atas-Latin1 sekarang ternoda, dan tidak sebelumnya. Ini mengarah ke
hasil pewarnaan yang lebih konsisten. Pola ekspresi reguler menodai non-binernya
hasil (seperti $&, $2) jika dan hanya jika polanya berisi elemen yang kecocokannya bergantung
pada lokal saat ini (berpotensi tercemar). Seperti fungsi perubahan kasus, yang sebenarnya
isi string yang dicocokkan sekarang tidak masalah, sedangkan sebelumnya memang demikian. Untuk
contoh, jika polanya berisi "\w", hasilnya akan ternoda bahkan jika kecocokannya berhasil
tidak harus menggunakan bagian pola itu untuk berhasil atau gagal, karena betapa "\w"
pertandingan tergantung pada lokal. Namun, misalnya, "." dalam suatu pola tidak akan memungkinkan
menodai, karena titik cocok dengan karakter tunggal apa pun, dan apa lokal saat ini
tidak berubah dengan cara apa pun apa yang cocok dan apa yang tidak.

"\P{}", "\P{}" sesuai memiliki berubah untuk non-Unicode kode poin.
"\p{}" dan "\P{}" didefinisikan oleh Unicode hanya pada titik kode yang didefinisikan Unicode ("U+0000"
melalui "U+10FFFF"). Perilaku mereka dalam mencocokkan poin kode Unicode legal ini adalah
tidak berubah, tetapi ada perubahan untuk poin kode 0x110000 ke atas. Sebelumnya, Perl
memperlakukan hasil pencocokan "\p{}" dan "\P{}" dengan ini sebagai "undef", yang
diterjemahkan menjadi "salah". Untuk "\P{}", ini kemudian dilengkapi dengan "true". Sebuah peringatan
seharusnya diangkat ketika ini terjadi. Namun, berbagai pengoptimalan dapat
mencegah peringatan, dan hasilnya sering kali berlawanan dengan intuisi, dengan kecocokan dan
pelengkap yang tampaknya salah. Sekarang semua poin kode non-Unicode diperlakukan sebagai
poin kode Unicode khas yang tidak ditetapkan. Ini umumnya lebih Do-What-I-Mean. Sebuah peringatan
dimunculkan hanya jika hasilnya bisa dibilang berbeda dari pendekatan Unicode yang ketat, dan
dari apa yang biasa dilakukan Perl. Kode yang harus benar-benar mematuhi Unicode dapat membuat ini
peringatan fatal, dan kemudian Perl selalu memunculkan peringatan tersebut.

Detailnya ada di "Di luar poin kode Unicode" di perlunicode.

"\membosankan}" memiliki menjadi diperluas untuk pertandingan semua mungkin kode poin
Elemen pola ekspresi reguler yang ditentukan Perl "\p{All}", tidak digunakan pada CPAN, digunakan untuk
cocokkan hanya dengan poin kode Unicode; sekarang cocok dengan semua poin kode yang mungkin; hanya itu saja
setara dengan "qr/./s". Jadi "\p{Semua}" tidak lagi identik dengan "\p{Apa saja}", yang
terus mencocokkan hanya poin kode Unicode, seperti yang dikatakan Unicode.

Data::Dumper's keluaran mungkin perubahan
Bergantung pada struktur data yang dibuang dan pengaturan yang ditetapkan untuk Data::Dumper, the dumped
output mungkin telah berubah dari versi sebelumnya.

Jika Anda memiliki pengujian yang bergantung pada keluaran Data::Dumper yang tepat, pengujian tersebut mungkin gagal.

Untuk menghindari masalah ini dalam kode Anda, uji terhadap struktur data dari mengevaluasi
struktur dumped, bukan dump itu sendiri.

Lokal desimal titik karakter tidak lagi kebocoran di luar of "menggunakan lokal" cakupan
Ini sebenarnya adalah perbaikan bug, tetapi beberapa kode bergantung pada bug yang ada, jadi
perubahan ini tercantum di sini. Lokal saat ini yang menjalankan program bukanlah
seharusnya terlihat oleh kode Perl kecuali dalam lingkup "gunakan lokal". Namun,
sampai sekarang dalam keadaan tertentu, karakter yang digunakan untuk titik desimal (seringkali a
koma) bocor di luar ruang lingkup. Jika kode Anda terpengaruh oleh perubahan ini, cukup tambahkan a
"gunakan lokal".

Tugas of Windows soket kesalahan Kode untuk $! sekarang lebih suka errno.h nilai-nilai lebih
WSAGetLastError() nilai-nilai
Di versi Perl sebelumnya, kode kesalahan soket Windows seperti yang dikembalikan oleh WSAGetLastError()
ditugaskan ke $!, dan beberapa konstanta seperti ECONNABORTED, bukan di errno.h di VC++ (atau
berbagai port Windows gcc) didefinisikan ke nilai WSAE* yang sesuai untuk memungkinkan $!
untuk diuji terhadap konstanta E* yang diekspor oleh Errno dan POSIX.

Ini bekerja dengan baik hingga VC++ 2010 dan yang lebih baru, yang memperkenalkan konstanta E* baru dengan nilai
> 100 menjadi errno.h, termasuk beberapa yang (kembali) ditentukan oleh Perl ke nilai WSAE*. Itu menyebabkan
masalah saat menautkan kode XS ke perpustakaan lain yang menggunakan definisi asli
of errno.h konstanta.

Untuk menghindari ketidakcocokan ini, Perl sekarang memetakan kode kesalahan WSAE* ke nilai E* di mana
mungkin, dan memberikan nilai-nilai itu ke $!. Konstanta E* diekspor oleh Errno dan POSIX
diperbarui agar sesuai sehingga menguji $! melawan mereka, sedapat mungkin sebelumnya, akan
terus bekerja seperti yang diharapkan, dan semua konstanta E* ditemukan di errno.h sekarang diekspor dari
modul-modul itu dengan aslinya errno.h nilai-nilai.

Untuk menghindari kerusakan pada kode Perl yang ada yang memberikan nilai WSAE* ke $!, perl
sekarang memotong tugas dan melakukan pemetaan yang sama ke nilai E* seperti yang digunakannya
secara internal saat menetapkan ke $! diri.

Namun, satu ketidakcocokan mundur tetap ada: kode Perl yang ada yang membandingkan $!
terhadap nilai numerik kode kesalahan WSAE* yang sebelumnya ditetapkan ke $!
sekarang akan rusak dalam kasus-kasus di mana nilai E* yang sesuai telah ditetapkan
sebagai gantinya. Ini hanya masalah untuk nilai E* < 100, yang selalu diekspor dari
Errno dan POSIX dengan aslinya errno.h nilai, dan karena itu tidak dapat digunakan untuk
Tes kode kesalahan WSAE* (misalnya WSAEINVAL adalah 10022, tetapi EINVAL yang sesuai adalah 22). (E*
nilai > 100, jika ada, didefinisikan ulang ke nilai WSAE*, jadi kompatibilitasnya bisa
dicapai dengan menggunakan konstanta E*, yang akan bekerja baik sebelum dan sesudah perubahan ini,
meskipun menggunakan nilai numerik yang berbeda di bawah tenda.)

Fungsi "PerlIO_vsprintf" dan "PerlIO_sprintf" memiliki menjadi dihapus
Kedua fungsi ini, tidak terdokumentasi, tidak digunakan dalam CPAN, dan bermasalah, telah dihapus.

Penghentian


"/\C/" karakter kelas
Kelas karakter ekspresi reguler "/\C/" tidak digunakan lagi. Dari Perl 5.22 dan seterusnya
akan menghasilkan peringatan, dan mulai dari Perl 5.24 dan seterusnya akan menjadi ekspresi reguler
kesalahan kompiler. Jika Anda perlu memeriksa byte individual yang membentuk enkode UTF8
karakter, lalu gunakan "utf8::encode()" pada string (atau salinan) terlebih dahulu.

Secara harfiah kontrol karakter in variabel nama
Penghentian ini memengaruhi hal-hal seperti $\cT, di mana \cT adalah kontrol literal (seperti "NAK"
atau karakter "NEGATIVE ACKNOWLEDGE") dalam kode sumber. Anehnya, tampaknya
awalnya ini dimaksudkan sebagai cara kanonik untuk mengakses variabel seperti $^T, dengan
bentuk caret hanya ditambahkan sebagai alternatif.

Formulir kontrol literal tidak digunakan lagi karena dua alasan utama. Ini memiliki apa yang mungkin
bug yang tidak dapat diperbaiki, seperti $\cI tidak berfungsi sebagai alias untuk $^I, dan penggunaannya tidak
portabel ke platform non-ASCII: Sementara $^T akan berfungsi di mana saja, \cT adalah spasi di
EBCDIC. [perl #119123]

Referensi untuk bukan bilangan bulat dan tidak positif bilangan bulat in $/
Menyetel $/ ke referensi ke nol atau referensi ke bilangan bulat negatif sekarang tidak digunakan lagi,
dan akan berperilaku persis seolah-olah itu diatur ke "undef". Jika Anda ingin mengatur perilaku slurp
$/ untuk "undef" secara eksplisit.

Mengatur $/ ke referensi ke non integer sekarang dilarang dan akan menimbulkan kesalahan. Perl
tidak pernah mendokumentasikan apa yang akan terjadi dalam konteks ini dan ketika digunakan untuk berperilaku
sama seperti menyetel $/ ke alamat referensi di masa mendatang mungkin berperilaku berbeda,
jadi kami telah melarang penggunaan ini.

Karakter sesuai rutinitas in POSIX
Penggunaan salah satu fungsi ini dalam modul "POSIX" sekarang tidak digunakan lagi: "isalnum",
"isalpha", "iscntrl", "isdigit", "isgraph", "islower", "isprint", "ispunct", "isspace",
"isupper", dan "isxdigit". Fungsinya bermasalah dan tidak berfungsi pada UTF-8 yang dikodekan
string. Lihat entri mereka di POSIX untuk informasi lebih lanjut.

Peringatan dimunculkan pada panggilan pertama ke salah satu dari mereka dari setiap tempat dalam kode yang mereka
disebut. (Oleh karena itu pernyataan berulang dalam satu lingkaran hanya akan memunculkan satu peringatan.)

Berbasis juru bahasa benang adalah sekarang patah hati
"Utas berbasis juru bahasa" yang disediakan oleh Perl bukanlah sistem yang cepat dan ringan untuk
multitasking yang mungkin diharapkan atau diharapkan. Utas diimplementasikan dengan cara yang
membuatnya mudah disalahgunakan. Hanya sedikit orang yang tahu cara menggunakannya dengan benar atau akan dapat
memberikan bantuan.

Penggunaan utas berbasis juru bahasa di Perl secara resmi tidak disarankan.

Modul kepindahan
Modul berikut akan dihapus dari distribusi inti di rilis mendatang, dan
akan pada saat itu perlu diinstal dari CPAN. Distribusi pada CPAN yang membutuhkan
modul-modul ini perlu mencantumkannya sebagai prasyarat.

Versi inti dari modul ini sekarang akan mengeluarkan peringatan kategori "usang" untuk memperingatkan
Anda untuk fakta ini. Untuk membungkam peringatan penghentian ini, instal modul yang dimaksud
dari CPAN.

Perhatikan bahwa penghapusan yang direncanakan dari modul-modul ini dari inti tidak mencerminkan penilaian
tentang kualitas kode dan tidak boleh dianggap sebagai saran bahwa penggunaannya harus
dihentikan. Penghilangan mereka dari inti terutama bergantung pada kebutuhan mereka untuk bootstrap
instalasi Perl yang berfungsi penuh dan berkemampuan CPAN, tidak mengkhawatirkan desainnya.

CGI dan CGI terkait:: paket
termasuk::terbaru
Paket::Konstanta
Module::Build dan modul terkaitnya::Build:: package

Kegunaan kepindahan
Utilitas berikut akan dihapus dari distribusi inti di rilis mendatang,
dan pada saat itu perlu diinstal dari CPAN.

temukan2perl
s2p
a2d

Performance tambahan


· Perl memiliki mekanisme copy-on-write baru yang menghindari kebutuhan untuk menyalin internal
buffer string saat menetapkan dari satu skalar ke skalar lainnya. Ini membuat penyalinan menjadi besar
string muncul lebih cepat. Memodifikasi salah satu dari dua (atau lebih) string setelah an
tugas akan memaksa salinan internal. Ini membuatnya tidak perlu melewatkan string
referensi untuk efisiensi.

Fitur ini sudah tersedia di 5.18.0, tetapi tidak diaktifkan secara default. Ini adalah
default sekarang, jadi Anda tidak perlu lagi membangun Perl dengan Konfigurasi argumen:

-Accflags=-DPERL_NEW_COPY_ON_WRITE

Itu dapat dinonaktifkan (untuk saat ini) di perl build dengan:

-Accflags=-DPERL_NO_COW

Pada beberapa sistem operasi Perl dapat dikompilasi sedemikian rupa sehingga setiap upaya untuk
memodifikasi buffer string yang dibagikan oleh beberapa SV akan macet. Dengan cara ini penulis XS dapat menguji
bahwa modul mereka menangani skalar copy-on-write dengan benar. Lihat "Menyalin saat Tulis" di
perlguts untuk detail.

· Perl memiliki pengoptimal untuk pola ekspresi reguler. Ini menganalisis pola untuk
temukan hal-hal seperti panjang minimum string yang harus dicocokkan, dll. Sekarang
lebih baik menangani poin kode yang berada di atas rentang Latin1.

· Menjalankan regex yang berisi jangkar "^" (atau variannya di bawah bendera "/ m")
telah dibuat lebih cepat dalam beberapa situasi.

· Nilai hash yang telah dikomputasi sekarang digunakan di lebih banyak tempat selama pencarian metode.

· Pencarian kunci hash konstan ($hash{key} sebagai lawan dari $hash{$key}) telah lama
nilai hash internal dihitung pada waktu kompilasi, untuk mempercepat pencarian. Pengoptimalan ini
hanya sekarang telah diterapkan pada irisan hash juga.

· Gabungan operator "dan" dan "atau" dalam konteks batal, seperti yang dihasilkan untuk "kecuali
($a && $b)" dan "if ($a || b)" sekarang hubung singkat langsung ke akhir pernyataan.
[perl #120128]

· Dalam situasi tertentu, ketika "kembali" adalah pernyataan terakhir dalam subrutin utama
ruang lingkup, itu akan dioptimalkan. Ini berarti kode seperti:

sub baz { kembali $cat; }

sekarang akan berperilaku seperti:

sub baz { $kucing; }

yang terutama lebih cepat.

[perl #120765]

· Kode seperti:

$x saya; # atau @x, %x
saya $y;

sekarang dioptimalkan untuk:

saya ($x, $y);

Dikombinasikan dengan optimasi padrange yang diperkenalkan di v5.18.0, ini berarti lebih lama
pernyataan variabel saya yang tidak diinisialisasi juga dioptimalkan, jadi:

$x saya; saya @y; %z saya;

menjadi:

saya ($x, @y, %z);

[perl #121077]

· Pembuatan daftar jenis tertentu, termasuk array dan irisan hash, sekarang
lebih cepat.

· Optimalisasi untuk array yang diindeks dengan bilangan bulat konstan kecil sekarang diterapkan untuk
bilangan bulat dalam kisaran -128..127, bukan 0..255. Ini akan mempercepat kode Perl
menggunakan ekspresi seperti $x[-1], dengan mengorbankan kode (mungkin jauh lebih jarang) menggunakan
ekspresi seperti $x[200].

· Iterasi pertama pada hash besar (menggunakan "keys" atau "each") sekarang lebih cepat. Ini adalah
dicapai dengan mengalokasikan status iterator internal hash, bukan dengan malas
membuatnya ketika hash pertama kali diulang. (Untuk hash kecil, iteratornya masih
dibuat hanya saat pertama kali dibutuhkan. Asumsinya adalah bahwa hash kecil lebih mungkin untuk
digunakan sebagai objek, dan karena itu tidak pernah dialokasikan. Untuk hash besar, itu kurang
mungkin benar, dan biaya alokasi iterator dibanjiri oleh biaya
mengalokasikan ruang untuk hash itu sendiri.)

· Saat melakukan pencocokan regex global pada string yang berasal dari "readline" atau "<>"
operator, data tidak lagi disalin secara tidak perlu. [perl #121259]

· Dereferencing (seperti dalam "$obj->[0]" atau "$obj->{k}") sekarang lebih cepat ketika $obj adalah
instance dari kelas yang memiliki metode kelebihan beban, tetapi tidak membebani salah satu dari
metode dereferensi "@{}", "%{}", dan seterusnya.

· Pengoptimal Perl tidak lagi melewatkan kode pengoptimalan yang mengikuti "eval {}" tertentu
ekspresi (termasuk yang memiliki loop tak terbatas yang jelas).

· Implementasi sekarang melakukan pekerjaan yang lebih baik untuk menghindari pekerjaan yang tidak berarti saat runtime.
Operasi "null" bebas efek internal (dibuat sebagai efek samping dari parsing Perl
program) biasanya dihapus selama kompilasi. Penghapusan itu sekarang diterapkan di
beberapa situasi yang sebelumnya tidak ditangani.

· Perl sekarang melakukan lebih sedikit I/O disk ketika berhadapan dengan properti Unicode yang menutupi hingga
tiga rentang poin kode berurutan.

Modul dan Pragmatis


New Modul dan Pragmatis
· eksperimental 0.007 telah ditambahkan ke inti Perl.

· IO::Socket::IP 0.29 telah ditambahkan ke inti Perl.

Updated Modul dan Pragmatis
· Arsip:: Tar telah ditingkatkan dari versi 1.90 ke 1.96.

· arybase telah ditingkatkan dari versi 0.06 ke 0.07.

· Atribut::Penangan telah ditingkatkan dari versi 0.94 ke 0.96.

· atribut telah ditingkatkan dari versi 0.21 ke 0.22.

· autodie telah ditingkatkan dari versi 2.13 ke 2.23.

· AutoLoader telah ditingkatkan dari versi 5.73 menjadi 5.74.

· penggunaan otomatis telah ditingkatkan dari versi 1.07 ke 1.08.

· B telah ditingkatkan dari versi 1.42 ke 1.48.

· B::Ringkas telah ditingkatkan dari versi 0.95 ke 0.992.

· B::Debug telah ditingkatkan dari versi 1.18 ke 1.19.

· B::Deparse telah ditingkatkan dari versi 1.20 ke 1.26.

· basis telah ditingkatkan dari versi 2.18 ke 2.22.

· Benchmark telah ditingkatkan dari versi 1.15 menjadi 1.18.

· bignum telah ditingkatkan dari versi 0.33 ke 0.37.

· Ikan mas telah ditingkatkan dari versi 1.29 ke 1.3301.

· CGI telah ditingkatkan dari versi 3.63 menjadi 3.65. CATATAN: CGI tidak digunakan lagi dan mungkin
dihapus dari versi Perl yang akan datang.

· charnames telah ditingkatkan dari versi 1.36 ke 1.40.

· Kelas:: Struktur telah ditingkatkan dari versi 0.64 ke 0.65.

· Compress::Raw::Bzip2 telah ditingkatkan dari versi 2.060 ke 2.064.

· Compress::Raw::Zlib telah ditingkatkan dari versi 2.060 ke 2.065.

· Config::Perl::V telah ditingkatkan dari versi 0.17 ke 0.20.

· konstanta telah ditingkatkan dari versi 1.27 ke 1.31.

· CPAN telah ditingkatkan dari versi 2.00 menjadi 2.05.

· CPAN::Meta telah ditingkatkan dari versi 2.120921 ke 2.140640.

· CPAN::Meta::Persyaratan telah ditingkatkan dari versi 2.122 ke 2.125.

· CPAN::Meta::YAML telah ditingkatkan dari versi 0.008 menjadi 0.012.

· Data::Dumper telah ditingkatkan dari versi 2.145 ke 2.151.

· DB telah ditingkatkan dari versi 1.04 ke 1.07.

· DB_File telah ditingkatkan dari versi 1.827 ke 1.831.

· DBM_Filter telah ditingkatkan dari versi 0.05 menjadi 0.06.

· deprecate telah ditingkatkan dari versi 0.02 ke 0.03.

· Devel::Peek telah ditingkatkan dari versi 1.11 ke 1.16.

· Devel::PPPort telah ditingkatkan dari versi 3.20 ke 3.21.

· diagnostik telah ditingkatkan dari versi 1.31 ke 1.34.

· Intisari::MD5 telah ditingkatkan dari versi 2.52 ke 2.53.

· Intisari::SHA telah ditingkatkan dari versi 5.84 menjadi 5.88.

· DynaLoader telah ditingkatkan dari versi 1.18 ke 1.25.

· Encode telah ditingkatkan dari versi 2.49 ke 2.60.

· encoding telah ditingkatkan dari versi 2.6_01 ke 2.12.

· Bahasa Inggris telah ditingkatkan dari versi 1.06 ke 1.09.

$OLD_PERL_VERSION telah ditambahkan sebagai alias dari $].

· Errno telah ditingkatkan dari versi 1.18 ke 1.20_03.

· Eksportir telah ditingkatkan dari versi 5.68 menjadi 5.70.

· ExtUtils::CBuilder telah ditingkatkan dari versi 0.280210 ke 0.280216.

· ExtUtils::Command telah ditingkatkan dari versi 1.17 ke 1.18.

· ExtUtils::Embed telah ditingkatkan dari versi 1.30 ke 1.32.

· ExtUtils::Instal telah ditingkatkan dari versi 1.59 ke 1.67.

· ExtUtils::MakeMaker telah ditingkatkan dari versi 6.66 ke 6.98.

· ExtUtils::Miniperl telah ditingkatkan dari versi ke 1.01.

· ExtUtils::ParseXS telah ditingkatkan dari versi 3.18 ke 3.24.

· ExtUtils::Typemaps telah ditingkatkan dari versi 3.19 ke 3.24.

· ExtUtils::XSSymSet telah ditingkatkan dari versi 1.2 ke 1.3.

· fitur telah ditingkatkan dari versi 1.32 ke 1.36.

· bidang telah ditingkatkan dari versi 2.16 ke 2.17.

· File:: Basename telah ditingkatkan dari versi 2.84 menjadi 2.85.

· File::Copy telah ditingkatkan dari versi 2.26 ke 2.29.

· File::DosGlob telah ditingkatkan dari versi 1.10 ke 1.12.

· File::Fetch telah ditingkatkan dari versi 0.38 ke 0.48.

· File::Find telah ditingkatkan dari versi 1.23 ke 1.27.

· File::Glob telah ditingkatkan dari versi 1.20 ke 1.23.

· File::Spec telah ditingkatkan dari versi 3.40 ke 3.47.

· File::Temp telah ditingkatkan dari versi 0.23 ke 0.2304.

· FileCache telah ditingkatkan dari versi 1.08 ke 1.09.

· Filter::Simple telah ditingkatkan dari versi 0.89 ke 0.91.

· Filter::Util::Call telah ditingkatkan dari versi 1.45 ke 1.49.

· Getopt::Long telah ditingkatkan dari versi 2.39 ke 2.42.

· Getopt::Std telah ditingkatkan dari versi 1.07 ke 1.10.

· Hash::Util::FieldHash telah ditingkatkan dari versi 1.10 ke 1.15.

· HTTP::Tiny telah ditingkatkan dari versi 0.025 ke 0.043.

· I18N::Langinfo telah ditingkatkan dari versi 0.10 ke 0.11.

· I18N::LangTags telah ditingkatkan dari versi 0.39 ke 0.40.

· jika telah ditingkatkan dari versi 0.0602 ke 0.0603.

· inc::latest telah ditingkatkan dari versi 0.4003 ke 0.4205. CATATAN: termasuk:: terbaru adalah
usang dan dapat dihapus dari versi Perl yang akan datang.

· integer telah ditingkatkan dari versi 1.00 ke 1.01.

· IO telah ditingkatkan dari versi 1.28 ke 1.31.

· IO::Compress::Gzip dan teman-teman telah ditingkatkan dari versi 2.060 ke 2.064.

· IPC::Cmd telah ditingkatkan dari versi 0.80 menjadi 0.92.

· IPC::Open3 telah ditingkatkan dari versi 1.13 ke 1.16.

· IPC::SysV telah ditingkatkan dari versi 2.03 ke 2.04.

· JSON::PP telah ditingkatkan dari versi 2.27202 ke 2.27203.

· Daftar::Util telah ditingkatkan dari versi 1.27 ke 1.38.

· lokal telah ditingkatkan dari versi 1.02 ke 1.03.

· Lokal::Kode telah ditingkatkan dari versi 3.25 ke 3.30.

· Lokal::Maketext telah ditingkatkan dari versi 1.23 ke 1.25.

· Math::BigInt telah ditingkatkan dari versi 1.9991 ke 1.9993.

· Math::BigInt::FastCalc telah ditingkatkan dari versi 0.30 ke 0.31.

· Math::BigRat telah ditingkatkan dari versi 0.2604 ke 0.2606.

· MIME::Base64 telah ditingkatkan dari versi 3.13 ke 3.14.

· Module::Build telah ditingkatkan dari versi 0.4003 menjadi 0.4205. CATATAN: Modul::Build adalah
usang dan dapat dihapus dari versi Perl yang akan datang.

· Module::CoreList telah ditingkatkan dari versi 2.89 ke 3.10.

· Module::Load telah ditingkatkan dari versi 0.24 ke 0.32.

· Module::Load::Conditional telah ditingkatkan dari versi 0.54 ke 0.62.

· Modul::Metadata telah ditingkatkan dari versi 1.000011 ke 1.000019.

· mro telah ditingkatkan dari versi 1.11 ke 1.16.

· Net::Ping telah ditingkatkan dari versi 2.41 ke 2.43.

· Opcode telah ditingkatkan dari versi 1.25 ke 1.27.

· Paket::Konstanta telah ditingkatkan dari versi 0.02 ke 0.04. CATATAN:
Package::Constants tidak digunakan lagi dan dapat dihapus dari versi Perl yang akan datang.

· Params::Check telah ditingkatkan dari versi 0.36 ke 0.38.

· induk telah ditingkatkan dari versi 0.225 ke 0.228.

· Parse::CPAN::Meta telah ditingkatkan dari versi 1.4404 ke 1.4414.

· Perl::OSType telah ditingkatkan dari versi 1.003 ke 1.007.

· perlfaq telah ditingkatkan dari versi 5.0150042 menjadi 5.0150044.

· PerlIO telah ditingkatkan dari versi 1.07 ke 1.09.

· PerlIO::encoding telah ditingkatkan dari versi 0.16 ke 0.18.

· PerlIO::scalar telah ditingkatkan dari versi 0.16 ke 0.18.

· PerlIO::via telah ditingkatkan dari versi 0.12 ke 0.14.

· Pod::Escapes telah ditingkatkan dari versi 1.04 ke 1.06.

· Pod::Fungsi telah ditingkatkan dari versi 1.06 ke 1.08.

· Pod::Html telah ditingkatkan dari versi 1.18 ke 1.21.

· Pod::Parser telah ditingkatkan dari versi 1.60 ke 1.62.

· Pod::Perldoc telah ditingkatkan dari versi 3.19 ke 3.23.

· Pod::Usage telah ditingkatkan dari versi 1.61 ke 1.63.

· POSIX telah ditingkatkan dari versi 1.32 menjadi 1.38_03.

· re telah ditingkatkan dari versi 0.23 ke 0.26.

· Aman telah ditingkatkan dari versi 2.35 ke 2.37.

· Skalar::Util telah ditingkatkan dari versi 1.27 ke 1.38.

· SDBM_File telah ditingkatkan dari versi 1.09 ke 1.11.

· Socket telah diupgrade dari versi 2.009 ke 2.013.

· Dapat disimpan telah ditingkatkan dari versi 2.41 menjadi 2.49.

· Strict telah ditingkatkan dari versi 1.07 ke 1.08.

· subs telah ditingkatkan dari versi 1.01 ke 1.02.

· Sys::Hostname telah ditingkatkan dari versi 1.17 ke 1.18.

· Sys::Syslog telah ditingkatkan dari versi 0.32 ke 0.33.

· Term::Cap telah ditingkatkan dari versi 1.13 ke 1.15.

· Term::ReadLine telah ditingkatkan dari versi 1.12 ke 1.14.

· Test::Harness telah ditingkatkan dari versi 3.26 ke 3.30.

· Test::Simple telah ditingkatkan dari versi 0.98 ke 1.001002.

· Teks::ParseWords telah ditingkatkan dari versi 3.28 menjadi 3.29.

· Teks::Tab telah ditingkatkan dari versi 2012.0818 ke 2013.0523.

· Teks::Wrap telah ditingkatkan dari versi 2012.0818 ke 2013.0523.

· Utas telah ditingkatkan dari versi 3.02 ke 3.04.

· Thread::Antrian telah ditingkatkan dari versi 3.02 ke 3.05.

· utas telah ditingkatkan dari versi 1.86 ke 1.93.

· threads::shared telah ditingkatkan dari versi 1.43 ke 1.46.

· Tie::Array telah ditingkatkan dari versi 1.05 ke 1.06.

· Tie::File telah ditingkatkan dari versi 0.99 ke 1.00.

· Tie::Hash telah ditingkatkan dari versi 1.04 ke 1.05.

· Tie::Scalar telah ditingkatkan dari versi 1.02 ke 1.03.

· Tie::StdHandle telah ditingkatkan dari versi 4.3 ke 4.4.

· Waktu::HiRes telah ditingkatkan dari versi 1.9725 ke 1.9726.

· Waktu::Piece telah ditingkatkan dari versi 1.20_01 ke 1.27.

· Unicode::Collate telah ditingkatkan dari versi 0.97 ke 1.04.

· Unicode::Normalize telah ditingkatkan dari versi 1.16 ke 1.17.

· Unicode::UCD telah ditingkatkan dari versi 0.51 ke 0.57.

· utf8 telah ditingkatkan dari versi 1.10 ke 1.13.

· versi telah ditingkatkan dari versi 0.9902 ke 0.9908.

· vmsish telah ditingkatkan dari versi 1.03 ke 1.04.

· peringatan telah ditingkatkan dari versi 1.18 ke 1.23.

· Win32 telah ditingkatkan dari versi 0.47 ke 0.49.

· XS::Typemap telah ditingkatkan dari versi 0.10 ke 0.13.

· XSLoader telah ditingkatkan dari versi 0.16 ke 0.17.

Dokumentasi


New Dokumentasi
perlrepositori

Dokumen ini telah dihapus (sebenarnya, berganti nama menjadi perlgit dan diberi perombakan besar-besaran) di Perl
v5.14, menyebabkan situs web dokumentasi Perl menampilkan versi yang sekarang kedaluwarsa di Perl
v5.12 sebagai versi terbaru. Sekarang telah dipulihkan dalam bentuk rintisan, mengarahkan pembaca untuk
informasi terkini.

Perubahan untuk yang ada Dokumentasi
perldata

· Bagian baru telah ditambahkan untuk mendokumentasikan irisan array indeks/nilai dan kunci/nilai baru
sintaks irisan hash.

perldebguts

· Subrutin debugger "DB::goto" dan "DB::lsub" sekarang didokumentasikan. [perl #77680]

percobaan bingung

· Pencocokan "\s" dengan "\cK" ditandai sebagai eksperimental.

· utas diterima di v5.8.0 (tetapi tidak disarankan pada v5.20.0).

· Ganda panjang tidak dianggap eksperimental.

· Kode dalam ekspresi reguler, kata kerja mundur ekspresi reguler, dan nilai
subrutin tidak lagi terdaftar sebagai eksperimental. (Ini juga mempengaruhi Perlre dan
perlsub.)

fungsi

· "chop" dan "chomp" sekarang perhatikan bahwa mereka dapat mengatur ulang iterator hash.

· Penanganan argumen "exec" sekarang didokumentasikan dengan lebih jelas.

· "eval EXPR" sekarang memiliki peringatan tentang perluasan angka floating point di beberapa lokal.

· "goto EXPR" sekarang didokumentasikan untuk menangani ekspresi yang dievaluasi ke kode
referensi seolah-olah itu "goto &$coderef". Perilaku ini setidaknya berusia sepuluh tahun.

· Sejak Perl v5.10, subrutin di @INC dimungkinkan untuk mengembalikan referensi
ke skalar yang memegang kode sumber awal untuk ditambahkan ke file. Ini sekarang
didokumentasikan.

· Dokumentasi "ref" telah diperbarui untuk merekomendasikan penggunaan "diberkati", "isa"
dan "reftype" ketika berhadapan dengan referensi ke objek yang diberkati.

perlguts

· Banyak perubahan kecil telah dibuat untuk mencerminkan perubahan yang dibuat pada internal perl di
rilis ini.

· Bagian baru pada Nilai Hanya-Baca dan Salin pada Tulis telah ditambahkan.

Perlhack

· Bagian Panduan Patch Super Cepat telah diperbarui.

perlhacktips

· Dokumentasi telah diperbarui untuk menyertakan beberapa contoh penggunaan "gdb".

perllexwarn

· Dokumentasi perllexwarn yang digunakan untuk menggambarkan hierarki kategori peringatan
dipahami oleh pragma peringatan. Deskripsi itu sekarang telah dipindahkan ke peringatan
dokumentasi itu sendiri, meninggalkan perllexwarn sebagai rintisan yang menunjuk ke sana. Perubahan ini
menggabungkan semua dokumentasi untuk peringatan leksikal di satu tempat.

perllocale

· Dokumentasi sekarang menyebutkan fc() dan "\F", dan mencakup banyak klarifikasi dan
koreksi secara umum.

bingung

· Desain bahasa Perl selalu membutuhkan operator monomorfik. Ini sekarang
disebutkan secara eksplisit.

perlopetut

· Tutorial "terbuka" telah sepenuhnya ditulis ulang oleh Tom Christiansen, dan sekarang fokus
pada hanya mencakup dasar-dasar, daripada memberikan referensi yang komprehensif untuk semua
hal-hal yang dapat dibuka. Penulisan ulang ini datang sebagai hasil dari diskusi yang kuat tentang
perl5-porter dimulai dengan serangkaian perbaikan yang ditulis oleh Alexander Hartmaier untuk
perlopentut yang ada. Sebuah "lebih dari yang Anda ingin tahu tentang dokumen "terbuka"
dapat mengikuti versi perl berikutnya.

perlre

· Fakta bahwa mesin regexp tidak berusaha memanggil (?{}) dan (??{}) konstruksi
beberapa kali tertentu (meskipun pada dasarnya akan DWIM jika berhasil
pertandingan) telah didokumentasikan.

· Pengubah "/r" (untuk substitusi non-destruktif) sekarang didokumentasikan. [perl #119151]

· Dokumentasi untuk "/x" dan "(?# komentar)" telah diperluas dan diklarifikasi.

perlreguts

· Dokumentasi telah diperbarui sehubungan dengan perubahan terbaru pada regcomp.c.

perlsub

· Kebutuhan untuk menyatakan terlebih dahulu fungsi rekursif dengan prototipe agar prototipe
untuk dihormati dalam panggilan rekursif sekarang didokumentasikan. [perl #2726]

· Daftar nama subrutin yang digunakan oleh implementasi perl sekarang disertakan. [perl
# 77680]

perlrap

· Sekarang ada bagian JavaScript.

perlunicode

· Dokumentasi telah diperbarui untuk mencerminkan perubahan "Bidi_Class" di Unicode 6.3.

perlvar

· Bagian baru yang menjelaskan masalah kinerja $`, $& dan $', termasuk
solusi dan perubahan dalam versi Perl yang berbeda, telah ditambahkan.

· Tiga nama variabel bahasa Inggris yang telah lama didokumentasikan tetapi sebenarnya tidak ada
telah dihapus dari dokumentasi. Ini adalah $OLD_PERL_VERSION, $OFMT, dan
$ARRAY_BASE.

(Sebenarnya, "OLD_PERL_VERSION" tidak ada, dimulai dengan revisi ini, tetapi tetap
tidak berdokumen hingga Perl 5.22.0.)

perlxs

· Beberapa masalah dalam contoh "MY_CXT" telah diperbaiki.

Diagnostik


Penambahan atau perubahan berikut telah dilakukan pada keluaran diagnostik, termasuk peringatan
dan pesan kesalahan fatal. Untuk daftar lengkap pesan diagnostik, lihat perldiag.

New Diagnostik
New kesalahan

· argumen hapus adalah irisan array indeks/nilai, gunakan irisan array

(F) Anda menggunakan sintaks irisan array indeks/nilai (%array[...]) sebagai argumen untuk "menghapus".
Anda mungkin bermaksud @array[...] dengan simbol @ sebagai gantinya.

· argumen hapus adalah irisan hash kunci/nilai, gunakan irisan hash

(F) Anda menggunakan sintaks irisan hash kunci/nilai (%hash{...}) sebagai argumen untuk "menghapus".
Anda mungkin bermaksud @hash{...} dengan simbol @ sebagai gantinya.

· Konstanta daftar ajaib tidak didukung

(F) Anda menetapkan array magis ke elemen simpanan, dan kemudian mencoba menggunakan
subrutin dari slot yang sama. Anda meminta Perl untuk melakukan sesuatu yang tidak dapat dilakukannya,
rincian dapat berubah antara versi Perl.

· Menambahkan Pengaturan $/ ke referensi %s dilarang

New Peringatan

· %s pada referensi bersifat eksperimental:

Fitur "auto-deref" bersifat eksperimental.

Mulai v5.14.0, dimungkinkan untuk menggunakan push, pop, keys, dan built-in lainnya
fungsi tidak hanya pada jenis agregat, tetapi pada referensi untuk mereka. Fitur itu tidak
dikerahkan ke spesifikasi yang dimaksudkan semula, dan sekarang mungkin menjadi berlebihan untuk
dereferensi postfix. Itu selalu dikategorikan sebagai fitur eksperimental, dan
di v5.20.0 membawa peringatan seperti itu.

Peringatan sekarang akan dikeluarkan pada waktu kompilasi ketika operasi ini terdeteksi.

tidak jika $] >= 5.01908, warnings => "experimental::autoderef";

Namun, pertimbangkan untuk mengganti penggunaan fitur-fitur ini, karena dapat mengubah perilaku
lagi sebelum menjadi stabil.

· Urutan beberapa spasi dalam definisi alias charnames tidak digunakan lagi

Trailing white-space dalam definisi alias charnames sudah tidak digunakan lagi

Dua peringatan penghentian yang melibatkan "\N{...}" ini tidak diterapkan dengan benar. Mereka
tidak memperingatkan secara default (sekarang mereka melakukannya) dan tidak dapat dibuat fatal melalui "gunakan peringatan
FATAL => 'usang'" (sekarang bisa).

· Prototipe atribut (%s) membuang atribut prototipe sebelumnya di sub yang sama

(W misc) Sub dideklarasikan sebagai "sub foo : prototype(A) : prototype(B) {}", untuk
contoh. Karena setiap sub hanya dapat memiliki satu prototipe, deklarasi sebelumnya adalah:
dibuang saat yang terakhir diterapkan.

· Karakter \0 tidak valid dalam %s untuk %s: %s\0%s

(W syscalls) Tertanam \0 karakter dalam nama path atau argumen panggilan sistem lainnya
menghasilkan peringatan pada 5.20. Bagian setelah \0 sebelumnya diabaikan oleh sistem
panggilan.

· Mencocokkan titik kode non-Unicode 0x%X terhadap properti Unicode; mungkin tidak portabel.

Ini menggantikan pesan "Titik kode 0x%X bukan Unicode, semua \p{} cocok gagal; semua
\P{} cocok berhasil".

· Tidak ada ']' dalam prototipe untuk %s : %s

(W illegalproto) Pengelompokan dimulai dengan "[" tetapi tidak pernah ditutup dengan "]".

· Kemungkinan masalah prioritas dengan operator aliran kontrol

(Sintaks W) Ada kemungkinan masalah dengan pencampuran operator aliran kontrol
(misalnya "kembali") dan operator dengan prioritas rendah seperti "atau". Mempertimbangkan:

sub { kembali $a atau $b; }

Ini diuraikan sebagai:

sub { (kembalikan $a) atau $b; }

Yang secara efektif hanya:

sub { kembali $a; }

Gunakan tanda kurung atau varian operator dengan prioritas tinggi.

Perhatikan ini mungkin juga dipicu untuk konstruksi seperti:

sub { 1 jika mati; }

· Dereferensi Postfix bersifat eksperimental

(S eksperimental::postderef) Peringatan ini dikeluarkan jika Anda menggunakan eksperimental
sintaks dereferensi postfix. Cukup tekan peringatan jika Anda ingin menggunakan
fitur, tetapi ketahuilah bahwa dengan melakukannya Anda mengambil risiko menggunakan eksperimen
fitur yang dapat diubah atau dihapus di versi Perl mendatang:

tidak ada peringatan "eksperimental::postderef";
gunakan fitur "postderef", "postderef_qq";
$ref->$*;
$aref->@*;
$aref->@[@indeks];
... dll ...

· Prototipe '%s' diganti dengan atribut 'prototipe(%s)' di %s

(Prototipe W) Sebuah prototipe dideklarasikan dalam kedua tanda kurung setelah nama sub dan
melalui atribut prototipe. Prototipe dalam tanda kurung tidak berguna, karena akan
digantikan oleh prototipe dari atribut sebelum digunakan.

· Nilai skalar @%s[%s] lebih baik ditulis sebagai $%s[%s]

(Sintaks W) Dalam konteks skalar, Anda telah menggunakan indeks array/irisan nilai (ditunjukkan dengan %)
untuk memilih satu elemen array. Umumnya lebih baik untuk meminta skalar
nilai (ditunjukkan dengan $). Perbedaannya adalah $foo[&bar] selalu berperilaku seperti a
skalar, baik dalam nilai yang dikembalikannya maupun saat mengevaluasi argumennya, while
%foo[&bar] menyediakan konteks daftar ke subskripnya, yang dapat melakukan hal-hal aneh jika
Anda hanya mengharapkan satu subskrip. Saat dipanggil dalam konteks daftar, itu juga mengembalikan
index (apa yang dikembalikan & bar) selain nilainya.

· Nilai skalar @%s{%s} lebih baik ditulis sebagai $%s{%s}

(Sintaks W) Dalam konteks skalar, Anda telah menggunakan kunci hash/irisan nilai (ditunjukkan dengan %) untuk
pilih satu elemen hash. Umumnya lebih baik untuk meminta nilai skalar
(ditunjukkan dengan $). Perbedaannya adalah $foo{&bar} selalu berperilaku seperti skalar,
baik dalam nilai yang dikembalikannya maupun saat mengevaluasi argumennya, sementara @foo{&bar} dan
memberikan konteks daftar ke subskripnya, yang dapat melakukan hal-hal aneh jika Anda
mengharapkan hanya satu subscript. Saat dipanggil dalam konteks daftar, itu juga mengembalikan kunci di
penambahan nilai.

· Menyetel $/ ke referensi ke %s sebagai bentuk slurp tidak digunakan lagi, diperlakukan sebagai undef

· Keluar tak terduga %u

(S) keluar() dipanggil atau skrip selesai dengan anggun ketika
"PERL_EXIT_WARN" disetel di "PL_exit_flags".

· Kegagalan keluar tak terduga %d

(S) Tidak tertangkap mati () dipanggil ketika "PERL_EXIT_WARN" disetel di "PL_exit_flags".

· Penggunaan karakter kontrol literal dalam nama variabel tidak digunakan lagi

(D tidak digunakan lagi) Menggunakan karakter kontrol literal di sumber untuk merujuk ke ^FOO
variabel, seperti $^X dan ${^GLOBAL_PHASE} sekarang tidak digunakan lagi. Ini hanya mempengaruhi kode
seperti $\cT, di mana \cT adalah kontrol (seperti "SOH") dalam kode sumber: ${"\cT"} dan $^T
tetap berlaku.

· Penggunaan pengubah keserakahan yang tidak berguna

Ini memperbaiki [Perl #42957].

Perubahan untuk yang ada Diagnostik
· Peringatan dan kesalahan dari mesin regexp sekarang UTF-8 bersih.

· Pesan kesalahan "Kondisi sakelar tidak diketahui" memiliki sedikit perubahan. kesalahan ini
terpicu ketika ada kondisi yang tidak diketahui dalam kondisi "(?(foo))". kesalahan
pesan yang digunakan untuk membaca:

Kondisi sakelar tidak diketahui (?(%s dalam regex;

Tapi yang %s bisa jadi sebagian besar tergantung pada keberuntungan. Untuk "(?(foobar))", Anda mungkin pernah melihat
"untuk" atau "f". Untuk karakter Unicode, Anda biasanya akan mendapatkan string yang rusak. NS
pesan telah diubah menjadi terbaca:

Kondisi sakelar tidak diketahui (?(...)) di regex;

Selain itu, penanda '<-- HERE' dalam kesalahan sekarang akan menunjuk ke tempat yang benar di
ekspresi reguler.

· Peringatan "%s "\x%X" tidak dipetakan ke Unicode" sekarang terdaftar dengan benar sebagai parah
peringatan daripada sebagai kesalahan fatal.

· Dalam keadaan yang jarang terjadi, seseorang bisa mendapatkan "Tidak dapat memaksa REF readonly ke string"
alih-alih "Modifikasi nilai hanya-baca" yang biasa. Kesalahan alternatif ini
pesan telah dihapus.

· "Penggunaan ambigu * diselesaikan sebagai operator *": Ini dan peringatan serupa tentang "%" dan
"&" digunakan untuk muncul dalam beberapa keadaan di mana tidak ada operator dari jenis yang disebutkan,
jadi peringatan itu benar-benar salah. Ini telah diperbaiki [perl #117535, #76910].

· Peringatan tentang prototipe subrutin yang cacat sekarang lebih konsisten dalam cara
prototipe diberikan. Beberapa dari peringatan ini akan memotong prototipe yang berisi
nol. Dalam kasus lain, satu peringatan akan menekan yang lain. Peringatan tentang ilegal
karakter dalam prototipe tidak lagi mengatakan "setelah '_'" jika karakter buruk datang sebelumnya
garis bawah.

· Aturan lipat Perl tidak up-to-date untuk 0x%X; silakan gunakan utilitas perlbug untuk
laporan; dalam ekspresi reguler; ditandai dengan <-- DI SINI dalam m/%s/

Pesan ini sekarang hanya dalam kategori regexp, dan tidak dalam kategori usang.
Ini masih merupakan peringatan default (yaitu, parah) [perl #89648].

· %%s[%s] dalam konteks skalar lebih baik ditulis sebagai $%s[%s]

Peringatan ini sekarang terjadi untuk %array[$index] atau %hash{key} yang diketahui dalam skalar
konteks pada waktu kompilasi. Sebelumnya ada tulisan "Nilai skalar %%s[%s] lebih baik
ditulis sebagai $%s[%s]".

· Beralih kondisi tidak dikenali di regex; ditandai dengan <-- DI SINI dalam m/%s/:

Deskripsi untuk diagnostik ini telah diperluas untuk mencakup semua kasus di mana:
peringatan dapat terjadi. Masalah dengan posisi indikator panah juga telah
terselesaikan.

· Pesan kesalahan untuk "my($a?$b$c)" dan "my(do{})" sekarang menyebutkan "conditional
ekspresi" dan "lakukan blok", masing-masing, alih-alih membaca 'Tidak dapat mendeklarasikan nol
operasi di "saya"'.

· Saat "use re "debug"" mengeksekusi regex yang berisi referensi balik, proses debug
output sekarang menunjukkan string apa yang sedang dicocokkan.

· Pesan kesalahan yang sekarang fatal "Karakter setelah "\c" harus ASCII" telah ditulis ulang
sebagai "Karakter setelah "\c" harus dapat dicetak ASCII" untuk menekankan bahwa di "\cX", X
harus a cetak (non-kontrol) karakter ASCII.

Kegunaan Perubahan


a2d

· Kemungkinan crash dari kesalahan off-by-one saat mencoba mengakses sebelum awal
buffer telah diperbaiki. [perl #120244]

membagi dua.pl

Alat bagi dua git Porting/membagi dua.pl telah memiliki banyak peningkatan.

Itu disediakan sebagai bagian dari distribusi sumber tetapi tidak diinstal karena tidak
mandiri karena bergantung pada dijalankan dari dalam git checkout. Perhatikan juga bahwa
tidak berusaha untuk memperbaiki tes, memperbaiki bug runtime atau membuat sesuatu yang berguna untuk diinstal -
tujuannya adalah untuk membuat perubahan minimal untuk mendapatkan revisi historis yang menarik untuk dibangun
dan jalankan sedekat mungkin dengan "sebagaimana adanya", dan dengan demikian membuat "git membagi dua" mudah digunakan.

· Secara opsional dapat menjalankan test case dengan batas waktu.

· Sekarang dapat berjalan di tempat dalam git checkout yang bersih.

· Dapat menjalankan test case di bawah "valgrind".

· Dapat menerapkan patch dan perbaikan yang disediakan pengguna ke checkout sumber sebelum membangun.

· Sekarang memiliki perbaikan untuk memungkinkan membangun beberapa rentang sejarah bleadperl, yang
dapat berguna untuk menunjukkan dengan tepat asal-usul bug atau perubahan perilaku.

temukan2perl

· find2perl sekarang menangani "?" wildcard dengan benar. [perl #113054]

perlbug

· perlbug sekarang memiliki opsi "-p" untuk melampirkan tambalan dengan laporan bug.

· perlbug telah dimodifikasi untuk menyediakan template laporan dengan akhiran baris CRLF aktif
jendela. [perl #121277 ]

· perlbug sekarang membuat asumsi sesedikit mungkin tentang penyandian laporan.
Ini kemungkinan akan berubah di masa mendatang untuk mengasumsikan UTF-8 secara default tetapi mengizinkan pengguna
mengesampingkan.

konfigurasi dan Kompilasi


· Itu Makefile.PL untuk SDBM_File sekarang menghasilkan yang lebih baik Makefile, yang menghindari balapan
kondisi selama pembuatan paralel, yang dapat menyebabkan kegagalan pembangunan. Ini adalah
masalah make paralel terakhir yang diketahui (pada platform *nix), dan oleh karena itu kami percaya bahwa a
paralel make sekarang harus selalu bebas dari kesalahan.

· penginstal dan tukang instalpenanganan opsi telah difaktorkan ulang untuk menggunakan Getopt::Long.
Keduanya digunakan oleh Makefile target "instal", dan tidak diinstal, jadi ini
perubahan hanya akan memengaruhi skrip penginstalan khusus.

· Opsi huruf tunggal sekarang juga memiliki nama yang panjang.

· Opsi yang tidak valid sekarang ditolak.

· Argumen baris perintah yang bukan opsi sekarang ditolak.

· Masing-masing sekarang memiliki opsi "--help" untuk menampilkan pesan penggunaan.

Perilaku untuk semua pemanggilan terdokumentasi yang valid tidak berubah.

· Jika memungkinkan, build sekarang menghindari pemanggilan rekursif dari membuat ketika membangun murni-
Ekstensi Perl, tanpa menghapus paralelisme apa pun dari build. Saat ini sekitar 80
ekstensi dapat diproses langsung oleh make_ext.pl alat, artinya 80
seruan dari membuat dan 160 doa dari miniperl tidak lagi dibuat.

· Sistem build sekarang berfungsi dengan benar saat kompilasi di bawah GCC atau Dentang dengan waktu tautan
pengoptimalan diaktifkan (opsi "-flto"). [perl #113022]

· Nama dasar perpustakaan yang berbeda dengan "d_libname_unique".

Saat mengkompilasi Perl dengan opsi ini, file perpustakaan untuk modul XS diberi nama
sesuatu yang "unik" -- misalnya, Hash/Util/Util.so menjadi
Hash/Util/PL_Hash__Util.so. Perilaku ini mirip dengan apa yang saat ini terjadi pada
VMS, dan berfungsi sebagai dasar untuk port Android.

· Opsi "sysroot" untuk menunjukkan direktori root logis di bawah gcc dan dentang.

Saat membangun dengan set opsi ini, baik Konfigurasi dan kompiler mencari semua
header dan pustaka di bawah sysroot baru ini, alih-alih /.

Ini adalah penghemat waktu yang sangat besar jika kompilasi silang, tetapi juga dapat membantu pada build asli jika
file toolchain Anda memiliki lokasi non-standar.

· Model kompilasi silang telah direnovasi. Ada beberapa opsi baru, dan beberapa
perubahan yang tidak kompatibel ke belakang:

Kami sekarang membangun binari untuk miniperl dan generate_uudmap untuk digunakan pada host, bukan
daripada menjalankan setiap panggilan miniperl pada target; ini berarti, singkatan dari 'make test',
kita tidak lagi memerlukan akses ke sistem target setelah Konfigurasi selesai. Anda dapat menyediakan
binari yang sudah dibangun melalui opsi "hostperl" dan "hostgenerate" untuk Mengkonfigurasi.

Selain itu, jika menargetkan platform EBCDIC dari host ASCII, atau sebaliknya, Anda akan
perlu menjalankan Konfigurasi dengan "-Uhostgenerate", untuk menunjukkan bahwa generate_uudmap harus
dijalankan tepat sasaran.

Akhirnya, ada juga cara agar Konfigurasi berakhir lebih awal, tepat setelah membangun
binari host, dengan kompilasi silang tanpa menentukan "targethost".

Perubahan yang tidak kompatibel termasuk tidak lagi menggunakan xconfig.h, xlib, atau Cross.pm, jadi
file konfigurasi kalengan dan Makefile harus diperbarui.

· Terkait dengan hal di atas, sekarang ada cara untuk menentukan lokasi sh (atau
setara) pada sistem target: "targetsh".

Misalnya, Android memiliki sh di /system/bin/sh, jadi jika kompilasi silang dari more
sistem Unixy normal dengan sh in / Bin / sh, "targetsh" akan berakhir sebagai /system/bin/sh, dan
"sh" sebagai /bin/sh.

· Secara default, gcc 4.9 melakukan beberapa pengoptimalan yang merusak Perl. NS -fwrapv Option
menonaktifkan pengoptimalan tersebut (dan mungkin yang lain), jadi untuk gcc 4.3 dan yang lebih baru (sejak
mungkin ada masalah serupa yang mengintai di versi yang lebih lama juga, tapi -fwrapv adalah
rusak sebelum 4.3, dan pengoptimalan mungkin tidak akan hilang), Konfigurasi sekarang menambahkan
-fwrapv kecuali permintaan pengguna -fno-wrapv, yang menonaktifkan -fwrapv, atau
-fsanitize=tidak terdefinisi, yang mengubah luapan -fwrapv mengabaikan kesalahan runtime.
[perl #121505 ]

pengujian


· Target make "test.valgrind" sekarang memungkinkan pengujian dijalankan secara paralel. Target ini
memungkinkan rangkaian uji Perl dijalankan di bawah Valgrind, yang mendeteksi jenis C . tertentu
kesalahan pemrograman, meskipun dengan biaya yang signifikan dalam waktu berjalan. Pada perangkat keras yang sesuai,
memungkinkan eksekusi paralel mencakar kembali banyak biaya tambahan itu. [perl #121431]

· Berbagai tes di t/memindahkan/ tidak lagi dilewati saat perl .git direktori adalah
di luar pohon perl dan ditunjuk oleh $GIT_DIR. [perl #120505]

· Test suite tidak lagi gagal ketika shell interaktif pengguna mempertahankan $PWD
variabel lingkungan, tetapi / Bin / sh digunakan untuk menjalankan tes tidak.

Platform Bantuan


New Platform
Android
Perl sekarang dapat dibuat untuk Android, baik secara native atau melalui kompilasi silang, untuk
ketiga arsitektur yang tersedia saat ini (ARM, MIPS, dan x86), pada berbagai
versi.

bitrig
Dukungan kompilasi telah ditambahkan untuk Bitrig, cabang dari OpenBSD.

GratisMinT
Dukungan telah ditambahkan untuk FreeMiNT, OS sumber terbuka gratis untuk sistem Atari ST dan
penerusnya, berdasarkan MiNT asli yang secara resmi diadopsi oleh Atari.

Synology
Synology mengirimkan kotak NAS-nya dengan distribusi Linux ramping (DSM) dengan harga yang relatif murah
CPU (seperti Marvell Kirkwood mv6282 - ARMv5tel atau Freescale QorIQ P1022 ppc -
e500v2) tidak dimaksudkan untuk workstation atau pengembangan. Kotak-kotak ini harus dibangun sekarang. NS
masalah dasar adalah lokasi non-standar untuk alat.

Dihentikan Platform
"sfio"
Kode yang terkait dengan mendukung sistem I/O "sfio" telah dihapus.

Perl 5.004 menambahkan dukungan untuk menggunakan API asli "sfio", AT&T Safe/Fast I/O
Perpustakaan. Kode ini masih dibuat dengan v5.8.0, meskipun dengan banyak tes regresi yang gagal,
tetapi secara tidak sengaja rusak sebelum rilis v5.8.1, artinya tidak berfungsi
pada versi Perl apa pun yang dirilis sejak saat itu. Dalam lebih dari satu dekade kami tidak menerima bug
melaporkan tentang ini, oleh karena itu jelas bahwa tidak ada yang menggunakan fungsi ini di mana pun
versi Perl yang masih didukung hingga tingkat apa pun.

AT&T 3b1
Konfigurasikan dukungan untuk 3b1, juga dikenal sebagai AT&T Unix PC (dan AT&T serupa
7300), telah dihapus.

Dirjen/UX
DG/UX adalah Unix yang dijual oleh Data General. Rilis terakhir adalah pada bulan April 2001. Hanya
berjalan pada perangkat keras Data General sendiri.

EBCDIC
Dengan tidak adanya sumber reguler laporan asap, kode dimaksudkan untuk mendukung asli
Platform EBCDIC akan dihapus dari Perl sebelum 5.22.0.

Platform-Spesifik Catatan
Cygwin
· recv () pada pegangan yang terhubung akan mengisi alamat pengirim yang dikembalikan dengan
apa pun yang terjadi di buffer kerja. recv () sekarang menggunakan solusi
mirip dengan Win32 recv () pembungkus dan mengembalikan string kosong ketika menerima(2)
tidak mengubah panjang alamat yang diberikan. [perl #118843]

· Memperbaiki kesalahan build di cygwin.c di Cygwin 1.7.28.

Pengujian sekarang menangani kesalahan yang terjadi saat "cygserver" tidak berjalan.

GNU / Hurd
Pustaka kompatibilitas BSD "libbsd" tidak lagi diperlukan untuk build.

Linux
File petunjuk sekarang mencari "libgdbm_compat" hanya jika "libgdbm" itu sendiri juga diinginkan.
Yang pertama tidak pernah berguna tanpa yang terakhir, dan dalam beberapa keadaan, termasuk itu
benar-benar bisa mencegah bangunan.

Mac OS
Sistem build sekarang menghormati pengaturan "ld" yang disediakan oleh pengguna yang menjalankan Konfigurasi.

tengah malamBSD
"objformat" telah dihapus dari versi 0.4-RELEASE dari MidnightBSD dan telah
ditinggalkan pada versi sebelumnya. Ini menyebabkan lingkungan build menjadi salah
dikonfigurasi untuk "a.out" daripada "elf". Ini sekarang telah diperbaiki.

Platform campuran-endian
Kode yang mendukung operasi "pack" dan "unpack" pada platform campuran endian telah
DIHAPUS. Kami percaya bahwa Perl telah lama tidak dapat membangun campuran endian
arsitektur (seperti PDP-11s), jadi kami tidak berpikir bahwa perubahan ini akan mempengaruhi apapun
platform yang mampu membangun v5.18.0.

VMS
· Fitur "PERL_ENV_TABLES" untuk mengontrol populasi %ENV saat memulai perl
rusak di Perl 5.16.0 tetapi sekarang telah diperbaiki.

· Lewati pemeriksaan akses pada remote di bukadir(). [perl #121002]

· Pemeriksaan untuk metakarakter glob di jalur yang dikembalikan oleh operator "glob()" telah
telah diganti dengan pemeriksaan karakter wildcard VMS. Ini menghemat signifikan
jumlah panggilan "lstat()" yang tidak perlu sehingga beberapa operasi glob sederhana menjadi
60-80% lebih cepat.

Win32
· "ganti nama" dan "tautan" di Win32 sekarang set $! ke ENOSPC dan EDQUOT bila perlu.
[perl #119857]

· Opsi makefile BUILD_STATIC dan ALL_STATIC untuk menautkan beberapa atau (hampir) semua
ekstensi secara statis (ke perl520.dll, dan ke perl-static.exe yang terpisah juga)
rusak untuk build MinGW. Ini sekarang telah diperbaiki.

Opsi ALL_STATIC juga telah ditingkatkan untuk menyertakan Encode dan Win32
ekstensi (untuk build VC++ dan MinGW).

· Dukungan untuk membangun dengan Visual C++ 2013 telah ditambahkan. Saat ini ada dua
kemungkinan kegagalan pengujian (lihat "Menguji Perl di Windows" di perlwin32) yang akan
semoga segera teratasi.

· Dukungan eksperimental untuk membangun dengan Intel C++ Compiler telah ditambahkan. NS
nmake makefile (win32/Makefile) dan dmake makefile (win32/makefile.mk) dapat
digunakan. "Tes nmake" tidak akan lulus saat ini karena cpan/CGI/t/url.t.

· Membunuh pohon proses dengan "membunuh" di perlfunc dan sinyal negatif, rusak
mulai 5.18.0. Dalam bug ini, "kill" selalu mengembalikan 0 untuk sinyal negatif
bahkan untuk PID yang valid, dan tidak ada proses yang dihentikan. Ini telah diperbaiki [perl
#121230].

· Waktu yang dibutuhkan untuk membangun Perl di Windows telah berkurang cukup signifikan (waktu
penghematan di wilayah 30-40% biasanya terlihat) dengan mengurangi jumlah,
biasanya gagal, I/O memanggil setiap "require()" (untuk miniperl.exe hanya). [perl
#121119 ]

· Sekitar 15 menit tidur menganggur telah dihapus dari menjalankan "uji coba" karena a
bug di mana monitor batas waktu yang digunakan untuk pengujian tidak dapat dibatalkan setelah
tes selesai, dan periode waktu tunggu penuh berlalu sebelum menjalankan tes berikutnya
mengajukan. [perl #121395 ]

· Pada perl yang dibuat tanpa garpu semu (pembuatan garpu semu tidak terpengaruh oleh ini
bug), mematikan pohon proses dengan "kill()" dan menghasilkan sinyal negatif
"kill()" membalikkan nilai yang dikembalikan. Misalnya, jika "kill()" membunuh 1 proses
pohon PID maka ia mengembalikan 0 alih-alih 1, dan jika "kill()" dilewatkan 2 tidak valid
PID kemudian mengembalikan 2 bukannya 0. Ini mungkin telah terjadi sejak
fitur proses pohon membunuh diimplementasikan pada Win32. Sekarang telah diperbaiki menjadi
mengikuti perilaku yang terdokumentasi. [perl #121230
]

· Saat membangun perl 64-bit, memori yang tidak diinisialisasi membaca miniperl.exe, digunakan
selama proses pembuatan, dapat menyebabkan 4GB wperl.exe sedang dibuat. Ini mempunyai
sekarang telah diperbaiki. (Perhatikan bahwa perl.exe itu sendiri tidak terpengaruh, tapi jelas
wperl.exe akan benar-benar rusak.) [Perl #121471
]

· Perl sekarang dapat dibangun dengan gcc versi 4.8.1 darihttp://www.mingw.org>. Ini
sebelumnya rusak karena definisi yang salah dari DllUtama() di salah satu perl's
file sumber. Lebih awal gcc versi juga terpengaruh saat menggunakan versi 4 dari
paket w32api. Versi dari gcc tersedia dari
<http://mingw-w64.sourceforge.net/> tidak terpengaruh. [perl #121643
]

· Test harness sekarang tidak mengalami kegagalan ketika Perl dibangun pada drive FAT dengan
OS Windows pada drive NTFS. [perl #21442
]

· Saat mengkloning tumpukan konteks di garpu() emulasi, Perl_cx_dup() akan jatuh
mengakses informasi parameter untuk entri tumpukan konteks yang menyertakan no
parameter, seperti "&foo;". [perl #121721
]

· Diperkenalkan oleh perl #113536
, kebocoran memori di setiap
panggilan ke "sistem" dan backticks (" `` "), di sebagian besar Win32 Perls mulai dari 5.18.0
telah diperbaiki. Kebocoran memori hanya terjadi jika Anda mengaktifkan psuedo-fork di
build dari Win32 Perl, dan menjalankan build tersebut di Server 2003 R2 atau OS yang lebih baru.
Kebocoran tidak muncul di WinXP SP3. [perl #121676
]

Menggerenyet
· Pembangunan modul XS sebagian besar telah dipulihkan. Beberapa masih belum bisa (belum)
dibangun tetapi sekarang mungkin untuk membangun Perl di WinCE hanya dengan beberapa
tambalan lebih lanjut (ke Socket dan ExtUtils :: MakeMaker), semoga dapat dimasukkan
segera.

· Perl sekarang dapat dibangun dalam satu kesempatan tanpa campur tangan pengguna di WinCE dengan menjalankan
"nmake -f Makefile.ce semua".

Dukungan untuk membangun dengan EVC (Embedded Visual C++) 4 telah dipulihkan. Perl bisa
juga dibangun menggunakan Perangkat Cerdas untuk Visual C++ 2005 atau 2008.

Intern Perubahan


· Representasi internal telah berubah untuk variabel pencocokan $1, $2 dll., $`, $&,
$', ${^PREMATCH}, ${^MATCH} dan ${^POSTMATCH}. Ini menggunakan memori yang sedikit lebih sedikit, menghindari
perbandingan string dan konversi numerik selama pencarian, dan menggunakan 23 baris lebih sedikit dari
C. Perubahan ini seharusnya tidak mempengaruhi kode eksternal apa pun.

· Array sekarang menggunakan NULL secara internal untuk mewakili slot yang tidak digunakan, bukan &PL_sv_undef.
&PL_sv_undef tidak lagi diperlakukan sebagai nilai khusus, jadi av_store(av, 0, &PL_sv_undef)
akan menyebabkan elemen 0 dari array itu menahan skalar tidak terdefinisi read-only. "$array[0] =
apa pun" akan serak dan "\$array[0]" akan dibandingkan sama dengan "\undef".

· SV dikembalikan oleh DiaSVKEY_force() sekarang dengan benar mencerminkan UTF8ness dari
kunci hash yang mendasari ketika kunci itu tidak disimpan sebagai SV. [perl #79074]

· Fungsi dan makro tertentu yang jarang digunakan yang tersedia untuk kode XS sekarang tidak digunakan lagi.
Ini adalah: "utf8_to_uvuni_buf" (gunakan "utf8_to_uvchr_buf" sebagai gantinya),
"valid_utf8_to_uvuni" (gunakan "utf8_to_uvchr_buf" sebagai gantinya), "NATIVE_TO_NEED" (ini berhasil
tidak berfungsi dengan baik), dan "ASCII_TO_NEED" (toh ini tidak berfungsi dengan baik).

Mulai rilis ini, hampir tidak pernah ada kode aplikasi yang perlu dibedakan
antara set karakter platform dan Latin1, di mana 256 karakter terendah
Unicode didasarkan. Kode baru tidak boleh menggunakan "utf8n_to_uvuni" (gunakan "utf8_to_uvchr_buf"
sebagai gantinya), atau "uvuni_to_utf8" (gunakan "uvchr_to_utf8" sebagai gantinya),

· Target pintasan Makefile untuk banyak pengujian dan pembuatan profil yang jarang (atau tidak pernah) digunakan
target telah dihapus, atau digabungkan menjadi satu-satunya target Makefile lain yang menggunakan
mereka. Secara khusus, target ini hilang, bersama dengan dokumentasi yang direferensikan
mereka atau menjelaskan cara menggunakannya:

check.ketiga check.utf16 check.utf8 coretest minitest.prep
minitest.utf16 perl.config.dashg perl.config.dashpg
perl.config.gcov perl.gcov perl.gprof perl.gprof.config
perl.pixie perl.pixie.atom perl.pixie.config perl.pixie.irix
perl.ketiga perl.ketiga.config perl.valgrind.config purecovperl
tes pureperl quantperl.tes deparse.tes taintwarn.ketiga
tes.torture tes.utf16 tes.utf8 test_notty.deparse
test_notty.ketiga test_notty.valgrind test_prep.ketiga
test_prep.valgrind penyiksaantest ucheck ucheck.ketiga ucheck.utf16
ucheck.valgrind utest utest. third utest.utf16 utest.valgrind

Masih mungkin untuk menjalankan perintah yang relevan dengan "tangan" - tidak ada yang mendasarinya
fungsionalitas telah dihapus.

· Sekarang mungkin untuk mencegah Perl menginisialisasi penanganan lokal. Untuk sebagian besar,
Perl tidak memperhatikan lokal. (Lihat perlllocale.) Meskipun demikian, sampai sekarang, di
startup, itu selalu menginisialisasi penanganan lokal ke default sistem, untuk berjaga-jaga
program yang dieksekusi akhirnya menggunakan lokal. (Ini adalah salah satu hal pertama
program sadar-lokal harus dilakukan, jauh sebelum Perl tahu apakah itu benar-benar dibutuhkan
atau tidak.) Ini berfungsi dengan baik kecuali ketika Perl disematkan di aplikasi lain yang
menginginkan lokal yang bukan default sistem. Sekarang, jika variabel lingkungan
"PERL_SKIP_LOCALE_INIT" disetel pada saat Perl dimulai, langkah inisialisasi ini
dilewati. Sebelum ini, pada platform Windows, satu-satunya solusi untuk ini
kekurangannya adalah menggunakan salinan kode Perl internal yang diretas. Aplikasi yang membutuhkan
untuk menggunakan Perl yang lebih lama dapat mengetahui apakah Perl tertanam yang mereka gunakan membutuhkan
solusi dengan menguji bahwa simbol praprosesor C "HAS_SKIP_LOCALE_INIT" tidak
didefinisikan. [RT #38193]

· "BmRARE" dan "BmPREVIOUS" telah dihapus. Mereka tidak digunakan di mana pun dan tidak
bagian dari API. Untuk modul XS, mereka sekarang #didefinisikan sebagai 0.

· "sv_force_normal", yang biasanya croaks pada nilai read-only, digunakan untuk memungkinkan read-only
nilai yang akan dimodifikasi pada waktu kompilasi. Ini telah diubah menjadi serak pada read-only
nilai-nilai terlepas. Perubahan ini menemukan beberapa bug inti.

· Mekanisme copy-on-write baru Perl (yang sekarang diaktifkan secara default), memungkinkan
Skalar "SvPOK" untuk ditingkatkan secara otomatis ke skalar copy-on-write saat disalin. A
jumlah referensi pada buffer string disimpan dalam buffer string itu sendiri.

Sebagai contoh:

$ perl -MDevel::Peek -e'$a="abc"; $b = $a; Buang $a; Buang $b'
SV = PV(0x260cd80) at 0x2620ad8
REFCNT = 1
BENDERA = (POK,IsCOW,pPOK)
PV = 0x2619bc0 "abc"\0
kur = 3
LEN = 16
SAPI_REFCNT = 1
SV = PV(0x260ce30) at 0x2620b20
REFCNT = 1
BENDERA = (POK,IsCOW,pPOK)
PV = 0x2619bc0 "abc"\0
kur = 3
LEN = 16
SAPI_REFCNT = 1

Perhatikan bahwa kedua skalar berbagi buffer PV yang sama dan memiliki COW_REFCNT lebih besar dari
nol.

Ini berarti bahwa kode XS yang ingin mengubah buffer "SvPVX()" dari SV harus
panggil "SvPV_force()" atau yang serupa terlebih dahulu, untuk memastikan buffer yang valid (dan tidak dibagikan), dan untuk
panggil "SvSETMAGIC()" setelahnya. Ini sebenarnya selalu terjadi (misalnya
kunci hash sudah copy-on-write); perubahan ini hanya menyebarkan perilaku sapi ke a
variasi SV yang lebih luas.

Satu perbedaan penting adalah bahwa sebelum 5.18.0, skalar kunci hash bersama dulu memiliki
set bendera "SvREADONLY"; ini tidak lagi terjadi.

Perilaku baru ini masih dapat dinonaktifkan dengan menjalankan Konfigurasi dengan
-Accflags=-DPERL_NO_COW. Opsi ini mungkin akan dihapus di Perl 5.22.

· "PL_sawampersand" sekarang menjadi konstanta. Sakelar yang disediakan variabel ini (ke
aktifkan/nonaktifkan salinan pra-pertandingan tergantung pada apakah $& telah dilihat) telah
dihapus dan diganti dengan copy-on-write, menghilangkan beberapa bug.

Perilaku sebelumnya masih dapat diaktifkan dengan menjalankan Konfigurasi dengan
-Accflags=-DPERL_SAWAMPERSAND.

· Fungsi "my_swap", "my_htonl" dan "my_ntohl" telah dihapus. Tidak jelas
mengapa fungsi-fungsi ini pernah ditandai sebagai A, bagian dari API. Kode XS tidak dapat memanggil mereka
langsung, karena tidak dapat mengandalkan kompilasi. Tidak mengherankan, tidak ada kode di CPAN
referensi mereka.

· Tanda tangan dari fungsi regex "Perl_re_intuit_start()" telah berubah; fungsinya
pointer "intuit" dalam struktur plugin mesin regex juga telah berubah. A
parameter baru, "strbeg" telah ditambahkan; ini memiliki arti yang sama dengan nama yang sama
parameter di "Perl_regexec_flags". Sebelumnya intuisi akan mencoba menebak awal
string dari SV yang diteruskan (jika ada), dan terkadang salah (misalnya dengan an
kelebihan beban SV).

· Tanda tangan dari fungsi regex "Perl_regexec_flags()" telah berubah; fungsinya
pointer "exec" dalam struktur plugin mesin regex juga telah diubah agar sesuai. NS
Parameter "minend" sekarang memiliki tipe "SSize_t" untuk mendukung sistem 64-bit dengan lebih baik.

· Kode XS dapat menggunakan berbagai makro untuk mengubah kasus karakter atau titik kode (untuk
contoh "toLOWER_utf8()"). Hanya beberapa di antaranya yang didokumentasikan sampai sekarang; dan sekarang
mereka harus digunakan dalam preferensi untuk memanggil fungsi yang mendasarinya. Lihat "Karakter
perubahan kasus" dalam perlapi.

· Kode ditangani agak tidak konsisten dengan uids dan gids. Beberapa tempat berasumsi bahwa mereka
dapat disimpan dengan aman di UV, yang lain di IV, yang lain di int. Empat makro baru adalah
diperkenalkan: SvUID(), sv_setuid(), SvGID(), dan sv_setgid()

· "sv_pos_b2u_flags" telah ditambahkan ke API. Ini mirip dengan "sv_pos_b2u", tapi
mendukung string panjang pada platform 64-bit.

· "PL_exit_flags" sekarang dapat digunakan oleh perl embedders atau kode XS lainnya untuk memiliki "perl"
atau "batalkan" pada upaya keluar. [perl #52000]

· Kompilasi dengan "-Accflags=-PERL_BOOL_AS_CHAR" sekarang memungkinkan kompiler C99 dan C++ untuk
meniru aliasing "bool" menjadi "char" yang dilakukan Perl untuk kompiler C89. [perl
# 120314]

· Argumen "sv" di "sv_2pv_flags" di perlapi, "sv_2iv_flags" di perlapi,
"sv_2uv_flags" di perlapi, dan "sv_2nv_flags" di perlapi dan pembungkus lama mereka
sv_2pv, sv_2iv, sv_2uv, sv_2nv, sekarang bukan NULL. Melewati NULL sekarang akan macet. Kapan
penanda non-NULL diperkenalkan secara massal di 5.9.3 fungsi ditandai non-
NULL, tetapi sejak pembuatan SV API di 5.0 alpha 2, jika NULL diteruskan,
fungsi mengembalikan 0 atau nilai tipe salah. Kode yang mendukung argumen "sv" adalah
tanggal non-NULL ke 5.0 alpha 2 secara langsung, dan secara tidak langsung ke Perl 1.0 (pre 5.0 api). NS
kurangnya dokumentasi bahwa fungsi menerima "sv" NULL telah diperbaiki di 5.11.0
dan antara 5.11.0 dan 5.19.5 fungsinya ditandai NULLOK. Sebagai optimasi,
Kode NULLOK sekarang telah dihapus, dan fungsinya menjadi non-NULL ditandai lagi,
karena makro tipe pengambil inti tidak pernah meneruskan NULL ke fungsi-fungsi ini dan akan macet
sebelum melewati NULL.

Satu-satunya cara NULL "sv" dapat diteruskan ke fungsi sv_2*v* adalah jika kode XS secara langsung
panggilan sv_2*v*. Ini tidak mungkin karena kode XS menggunakan makro Sv*V* untuk mendapatkan dasarnya
nilai dari SV. Satu kemungkinan situasi yang menyebabkan NULL "sv" diteruskan ke
sv_2*v* berfungsi, adalah jika kode XS mendefinisikan makro tipe pengambilnya sendiri Sv*V*, yang memeriksa
untuk NULL sebelum mendereferensi dan memeriksa flag SV melalui API publik Sv*OK*
makro atau langsung menggunakan API pribadi "SvFLAGS", dan jika "sv" adalah NULL, maka panggil
sv_2*v berfungsi dengan literal NULL atau meneruskan "sv" yang berisi nilai NULL.

· newATTRSUB sekarang menjadi makro

API publik newATTRSUB sebelumnya merupakan makro untuk fungsi pribadi
Perl_newATTRSUB. Fungsi Perl_newATTRSUB telah dihapus. newATTRSUB sekarang makro untuk
fungsi internal yang berbeda.

· Perubahan peringatan yang dimunculkan oleh "utf8n_to_uvchr()"

Fungsi tingkat bawah ini menerjemahkan karakter pertama dari string UTF-8 menjadi kode
titik. Ini dapat diakses oleh kode level "XS", tetapi tidak disarankan untuk menggunakannya
secara langsung. Ada fungsi tingkat yang lebih tinggi yang memanggil ini yang harus digunakan
sebagai gantinya, seperti "utf8_to_uvchr_buf" di perlapi. Untuk kelengkapannya, ini
mendokumentasikan beberapa perubahan padanya. Sekarang, tes untuk malformasi dilakukan sebelum tes apa pun
untuk masalah potensial lainnya. Salah satu masalah itu melibatkan poin kode yang sangat besar sehingga
mereka tidak pernah muncul dalam standar resmi apa pun (standar saat ini telah diskalakan
kembali titik kode tertinggi yang dapat diterima dari versi sebelumnya). Itu mungkin (meskipun
tidak dilakukan di CPAN) untuk memperingatkan dan/atau melarang poin kode ini, sambil menerima yang lebih kecil
poin kode yang masih di atas maksimum Unicode legal. Pesan peringatan untuk
ini sekarang termasuk titik kode jika dapat diwakili pada mesin. Sebelumnya itu
selalu menampilkan byte mentah, yang masih berfungsi untuk kode yang tidak dapat diwakili
poin.

· Perubahan mesin regexp yang memengaruhi antarmuka mesin regex yang dapat dipasang

Banyak flag yang dulu diekspos melalui regexp.h dan digunakan untuk mengisi extflags
anggota struct regexp telah dihapus. Bidang ini secara teknis pribadi untuk
Mesin regexp Perl sendiri dan seharusnya tidak diekspos di sana sejak awal.

Bendera yang terpengaruh adalah:

RXf_NOSCAN
RXf_CANY_SEEN
RXf_GPOS_SEEN
RXf_GPOS_FLOAT
RXf_ANCH_BOL
RXf_ANCH_MBOL
RXf_ANCH_SBOL
RXf_ANCH_GPOS

Serta topeng bendera berikut:

RXf_ANCH_SINGLE
RXf_ANCH

Semua telah diubah namanya menjadi setara PREGf_ dan dipindahkan ke regcomp.h.

Perilaku yang sebelumnya dicapai dengan menyetel satu atau lebih tanda RXf_ANCH_ (melalui
RXf_ANCH mask) sekarang telah digantikan oleh *single* flag bit di extflags:

RXf_IS_ANCHORED

mesin regex pluggable yang sebelumnya digunakan untuk mengatur flag ini sekarang harus mengatur ini
bendera SENDIRI.

· Inti Perl sekarang secara konsisten menggunakan "av_tindex()" ("indeks teratas dari sebuah array") sebagai
sinonim yang lebih jelas bernama untuk "av_len()".

· Variabel interpreter yang tidak jelas "PL_timesbuf" diharapkan akan dihapus pada awal
Seri pengembangan 5.21.x, sehingga Perl 5.22.0 tidak akan memberikannya kepada penulis XS.
Sementara variabel masih ada di 5.20.0, kami berharap peringatan dini dari
penghentian akan membantu siapa saja yang menggunakan variabel itu.

Terpilih Bug Perbaikan


Reguler Ekspresi
· Memperbaiki sejumlah kecil konstruksi regexp yang bisa gagal cocok atau macet
perl ketika string yang dicocokkan dialokasikan di atas garis 2GB pada 32-bit
sistem. [RT #118175]

· Berbagai kebocoran memori yang melibatkan penguraian ekspresi reguler "(?[...])"
konstruksi telah diperbaiki.

· "(?[...])" sekarang memungkinkan interpolasi pola yang telah dikompilasi yang terdiri dari "(?[...])"
dengan kelas karakter yang dikurung di dalam ("$pat = qr/(?[ [a] ])/; /(?[ $pat ])/").
Sebelumnya, tanda kurung akan membingungkan pengurai ekspresi reguler.

· Pesan peringatan "Quantifier tak terduga pada ekspresi panjang nol" dapat muncul
dua kali dimulai di Perl v5.10 untuk ekspresi reguler yang juga mengandung pergantian
(misalnya, "a|b") memicu pengoptimalan trie.

· Perl v5.18 secara tidak sengaja memperkenalkan bug di mana interpolasi campuran naik dan turun
string UTF-8 bergradasi dalam regex dapat menghasilkan UTF-8 dalam pola yang salah:
khususnya jika karakter yang diturunkan dalam rentang "\x80..\xff" mengikuti UTF-8
tali, misalnya

utf8::upgrade( $u saya = "\x{e5}");
utf8::downgrade($d saya = "\x{e5}");
/$u$d/

[RT #118297]

· Dalam ekspresi reguler yang berisi beberapa blok kode, nilai $1, $2, dll.,
disetel oleh panggilan ekspresi reguler bersarang akan bocor dari satu blok ke blok berikutnya. Sekarang
variabel-variabel ini selalu mengacu pada ekspresi reguler luar di awal an
blok tertanam [perl #117917].

· "/$qr/p" rusak di Perl 5.18.0; bendera "/ p" diabaikan. Ini telah diperbaiki.
[perl #118213]

· Mulai dari Perl 5.18.0, sebuah konstruksi seperti "/[#](?{})/x" akan memiliki "#" yang salah
diartikan sebagai komentar. Blok kode akan dilewati, tidak diuraikan. ini telah
dikoreksi.

· Mulai dari Perl 5.001, ekspresi reguler seperti "/[#$a]/x" atau "/[#]$a/x" akan memiliki
"#" salah ditafsirkan sebagai komentar, sehingga variabel tidak akan diinterpolasi.
Ini telah diperbaiki. [perl #45667]

· Perl 5.18.0 secara tidak sengaja membuat ekspresi reguler dereferenced ("${ qr// }") salah sebagai
boolean. Ini telah diperbaiki.

· Penggunaan "\G" dalam ekspresi reguler, yang tidak berada di awal pola, adalah
sekarang sedikit kurang buggy (walaupun masih agak bermasalah).

· Di mana ekspresi reguler menyertakan blok kode ("/(?{...})/"), dan di mana penggunaan
overloading konstan memicu kompilasi ulang blok kode, yang kedua
kompilasi tidak melihat lingkup leksikal luarnya. Ini adalah regresi di Perl 5.18.0.

· Posisi string yang diatur oleh "pos" dapat bergeser jika string mengubah representasi
secara internal ke atau dari utf8. Ini bisa terjadi, misalnya, dengan referensi ke objek dengan
kelebihan beban string.

· Mengambil referensi ke nilai balik dari dua panggilan "pos" dengan argumen yang sama, dan
kemudian menetapkan referensi ke satu dan "undef" ke yang lain, dapat menghasilkan pernyataan
kegagalan atau kebocoran memori.

· Elemen @- dan @+ sekarang diperbarui dengan benar saat merujuk pada tangkapan yang tidak ada.
Sebelumnya, elemen yang direferensikan ("$ref = \$-[1]") dapat merujuk ke kecocokan yang salah
setelah pertandingan-pertandingan berikutnya.

· Kode yang mem-parsing regex backrefs (atau backref/oktal ambigu) seperti \123 melakukan
sederhana atoi(), yang dapat membungkus nilai negatif pada string digit panjang dan
menyebabkan kesalahan segmentasi. Ini sekarang telah diperbaiki. [perl #119505]

· Menetapkan typeglob lain ke "*^R" tidak lagi membuat mesin ekspresi reguler
jatuh.

· Ekspresi reguler "\N" lolos, bila digunakan tanpa kurung kurawal (berarti
"[^\n]"), mengabaikan "*" berikut jika diikuti oleh spasi putih di bawah /x. Itu punya
sudah seperti ini sejak "\N" berarti "[^\n]" diperkenalkan di 5.12.0.

· "s///", "tr///" dan "y///" sekarang berfungsi ketika karakter lebar digunakan sebagai pembatas.
[perl #120463]

· Beberapa kasus unterminated (?...) urutan dalam ekspresi reguler (misalnya, "/(?
telah diperbaiki untuk menghasilkan pesan kesalahan yang tepat alih-alih "panic: memory wrap".
Kasus lain (misalnya, "/(?(/") belum diperbaiki.

· Ketika referensi ke referensi ke objek yang kelebihan beban dikembalikan dari reguler
ekspresi blok kode "(??{...})", dereferensi implisit yang salah dapat terjadi
jika referensi dalam telah dikembalikan oleh blok kode sebelumnya.

· Variabel terikat yang dikembalikan dari "(??{...})" melihat nilai dalam dari variabel kecocokan
(yaitu, $1 dll. dari kecocokan apa pun di dalam blok) dalam metode FETCH-nya. Ini
tidak demikian halnya jika referensi ke objek yang kelebihan beban adalah hal terakhir yang ditetapkan untuk
variabel terikat. Sebaliknya, variabel kecocokan mengacu pada pola luar selama
TARIK panggilan.

· Perbaiki noda tak terduga melalui regexp menggunakan lokal. Sebelumnya, dalam kondisi tertentu,
penggunaan kelas karakter dapat menyebabkan noda padahal seharusnya tidak. Beberapa karakter
kelas bergantung pada lokal, tetapi sebelum tambalan ini, terkadang tainting terjadi
bahkan untuk kelas karakter yang tidak bergantung pada lokal. [perl #120675]

· Dalam kondisi tertentu, Perl akan membuat kesalahan jika dalam pernyataan lookbehind di a
regexp, pernyataan merujuk ke subpola bernama, mengeluh tampilan di belakangnya adalah
variabel ketika tidak. Ini telah diperbaiki. [perl #120600], [perl #120618]. NS
perbaikan saat ini dapat ditingkatkan di masa depan.

· $^R tidak tersedia di luar ekspresi reguler yang menginisialisasinya. [perl
# 121070]

· Satu set besar perbaikan dan refactoring untuk re_intuit_start() telah digabungkan, sorotan
adalah:

· Memperbaiki kepanikan saat mengompilasi ekspresi reguler "/\x{100}[xy]\x{100}{2}/".

· Memperbaiki regresi kinerja saat melakukan kecocokan pola global terhadap a
string UTF-8. [perl #120692]

· Memperbaiki masalah kinerja lain saat mencocokkan ekspresi reguler seperti
"/ab.{1,2}x/" terhadap string UTF-8 yang panjang tidak perlu menghitung byte
offset untuk sebagian besar string. [perl #120692]

· Memperbaiki kesalahan penyelarasan saat mengkompilasi ekspresi reguler saat dibangun dengan GCC di HP-
UX 64-bit.

· Pada platform 64-bit "pos" sekarang dapat diatur ke nilai yang lebih tinggi dari 2**31-1. [perl
# 72766]

Perl 5 Debugger dan -d
· Perintah "pria" debugger telah diperbaiki. Itu rusak dalam rilis v5.18.0. NS
Perintah "man" adalah alias dengan nama "doc" dan "perldoc" - semuanya sekarang berfungsi kembali.

· @_ sekarang terlihat dengan benar di debugger, memperbaiki regresi yang diperkenalkan di
debugger v5.18.0. [RT #118169]

· Di bawah build copy-on-write (default pada 5.20.0) "${'_<-e'}[0]" tidak lagi mendapatkan
kompong. Ini adalah baris input pertama yang disimpan untuk penggunaan debugger untuk satu baris
[perl#118627].

· Pada build non-utas, menyetel "${"_
menyebabkan "__FILE__" dan beberapa pesan kesalahan menghasilkan string yang rusak, dan tidak lagi
mencegah arahan "#line" dalam evaluasi string dari menyediakan baris sumber ke
debugger Build berulir tidak terpengaruh.

· Dimulai dengan Perl 5.12, nomor baris dicoret satu per satu jika -d saklar digunakan pada
#! garis. Sekarang mereka benar.

· "*DB::DB = sub {} if 0" tidak lagi menghentikan mode debug Perl untuk menemukan "DB::DB"
subs dinyatakan setelahnya.

· Hash "%{'_<...'}" sekarang menyetel breakpoint pada "@{'_<...'}" yang sesuai daripada
array mana pun @DB::dbline alias. [perl #119799]

· Panggil set-magic saat menyetel $DB::sub. [perl #121255]

· Perintah "n" debugger sekarang menghormati subrutin lvalue dan melangkahi mereka [perl
#118839].

Leksikal Subrutin
· Konstanta leksikal ("my sub a() { 42 }") tidak lagi mogok saat dibariskan.

· Prototipe parameter yang dilampirkan ke subrutin leksikal sekarang dihormati saat kompilasi
sub panggilan tanpa tanda kurung. Sebelumnya, prototipe dihormati hanya untuk
panggilan dengan tanda kurung. [RT #116735]

· Kesalahan sintaks dalam subrutin leksikal dalam kombinasi dengan panggilan ke subrutin yang sama
tidak lagi menyebabkan crash pada waktu kompilasi.

· Peringatan rekursi dalam tidak lagi merusak subrutin leksikal. [RT #118521]

· Penyelidikan sub-entri dtrace sekarang bekerja dengan sub-sub leksikal, bukannya mogok [perl
#118305].

· Mendefinisikan subrutin leksikal yang tidak dapat dipisahkan ("my sub foo() { 42 } undef &foo") akan
mengakibatkan crash jika peringatan dihidupkan.

· Sebuah sub leksikal tidak terdefinisi yang digunakan sebagai metode yang diwariskan tidak lagi crash.

· Kehadiran sub leksikal bernama "CORE" tidak lagi menghentikan awalan CORE:: dari
kerja.

Semuanya Lain
· Kode alokasi OP sekarang mengembalikan memori yang disejajarkan dengan benar dalam semua kasus untuk "struct
pmop". Sebelumnya ia hanya dapat mengembalikan memori yang disejajarkan dengan batas 4-byte, yaitu
tidak benar untuk ithreads yang dibangun dengan 64 bit IV pada beberapa platform 32 bit. Terutama,
ini menyebabkan build gagal total pada sparc GNU/Linux. [RT #118055]

· Mengevaluasi hash besar dalam konteks skalar sekarang jauh lebih cepat, karena jumlah yang digunakan
rantai di hash sekarang di-cache untuk hash yang lebih besar. Hash yang lebih kecil terus tidak
simpan dan hitung saat dibutuhkan, karena ini menghemat satu IV. Itu akan menjadi 1 IV
overhead untuk setiap objek yang dibangun dari hash. [RT #114576]

· Perl v5.16 secara tidak sengaja memperkenalkan bug dimana panggilan ke XSUB yang tidak terlihat
pada waktu kompilasi diperlakukan sebagai nilai dan dapat ditetapkan, bahkan ketika
subrutin bukan sub nilai. Ini telah diperbaiki. [RT #117947]

· Di Perl v5.18.0 dualvars yang memiliki string kosong untuk bagian string tetapi bukan nol
nomor untuk bagian nomor yang mulai diperlakukan sebagai benar. Dalam versi sebelumnya mereka
diperlakukan sebagai salah, representasi string diutamakan. yang lama
perilaku telah dipulihkan. [RT #118159]

· Sejak Perl v5.12, sebaris konstanta yang menimpa kata kunci bawaan yang sama
name telah membalas "gunakan subs", menyebabkan penyebutan konstanta berikutnya untuk digunakan
kata kunci bawaan sebagai gantinya. Ini telah diperbaiki.

· Peringatan yang dihasilkan oleh "-l $handle" sekarang berlaku untuk referensi dan gumpalan IO, bukan hanya untuk
referensi glob. Peringatan itu juga sekarang UTF8-clean. [RT #117595]

· "hapus $ENV{nonexistent_env_var} lokal" tidak lagi membocorkan memori.

· "sort" dan "require" diikuti dengan kata kunci yang diawali dengan "CORE::" sekarang perlakukan sebagai
kata kunci, dan bukan sebagai subrutin atau nama modul. [RT #24482]

· Melalui teka-teki tertentu, adalah mungkin untuk menyebabkan paket saat ini dibebaskan.
Operator tertentu ("bless", "reset", "open", "eval") tidak dapat mengatasi dan akan crash.
Mereka telah dibuat lebih tangguh. [RT #117941]

· Aliasing filehandles melalui penugasan glob-to-glob tidak akan memperbarui metode internal
cache dengan benar jika paket dengan nama yang sama dengan filehandle ada, menghasilkan
panggilan metode filehandle pergi ke paket sebagai gantinya. Ini telah diperbaiki.

· "./Configure -de -Dusevendorprefix" tidak default. [RT #64126]

· Peringatan "Pernyataan tidak mungkin tercapai" terdaftar di perldiag sebagai
peringatan kategori "exec", tetapi diaktifkan dan dinonaktifkan oleh kategori "sintaks". Pada
di sisi lain, kategori "exec" mengendalikan kefatalannya. Sekarang sepenuhnya
ditangani oleh kategori "exec".

· Peringatan "Daftar pengganti lebih panjang dari daftar pencarian" untuk "tr///" dan "y///" tidak
lagi terjadi dengan adanya bendera "/ c". [RT #118047]

· Stringifikasi NV tidak di-cache sehingga lokal leksikal mengontrol
stringifikasi titik desimal. [perl #108378] [perl #115800]

· Ada beberapa perbaikan terkait dengan penanganan lokal oleh Perl. perl #38193 adalah
dijelaskan di atas dalam "Perubahan Internal". Juga diperbaiki adalah #118197, di mana radix
(titik desimal) karakter harus berupa karakter ASCII (yang tidak berfungsi untuk beberapa
bahasa non-Barat); dan #115808, di mana "POSIX::setlocale()" pada kegagalan kembali
sebuah "undef" yang tidak memperingatkan tentang tidak didefinisikan bahkan jika peringatan itu
diaktifkan.

· Mengkompilasi operator "split" yang argumen ketiganya adalah konstanta bernama yang mengevaluasi ke 0
tidak lagi menyebabkan nilai konstanta berubah.

· Konstanta bernama yang digunakan sebagai argumen kedua untuk "mengindeks" tidak lagi dipaksa untuk a
string jika itu adalah referensi, ekspresi reguler, dualvar, dll.

· Sebuah konstanta bernama mengevaluasi ke nilai tidak terdefinisi yang digunakan sebagai argumen kedua untuk
"index" tidak lagi menghasilkan peringatan "tidak diinisialisasi" pada waktu kompilasi. Masih akan
menghasilkan mereka pada waktu berjalan.

· Ketika skalar dikembalikan dari subrutin di @INC, skalar yang direferensikan adalah
secara ajaib diubah menjadi benda IO, mungkin menghasilkan kesalahan "Salinan aneh" jika
skalar itu terus digunakan di tempat lain. Sekarang Perl menggunakan salinan internal dari
skalar sebagai gantinya.

· Penggunaan tertentu dari operator "sort" dioptimalkan untuk memodifikasi array di tempat, seperti
"@a = urutkan @a". Selama penyortiran, array dibuat hanya-baca. Jika mengurutkan blok
harus kebetulan mati, maka array tetap hanya-baca bahkan di luar "sort". Ini
telah diperbaiki.

· $a dan $b di dalam blok pengurutan beralias dengan argumen sebenarnya untuk "mengurutkan", jadi mereka
dapat dimodifikasi melalui kedua variabel tersebut. Ini tidak selalu berhasil, misalnya, untuk
lvalue subs dan $#ary, dan mungkin banyak operator lainnya. Ini bekerja sekarang.

· Argumen untuk "mengurutkan" sekarang semuanya dalam konteks daftar. Jika "sort" itu sendiri disebut
dalam konteks batal atau skalar, maka beberapa, tetapi tidak semua, argumen yang dulunya tidak berlaku
atau konteks skalar.

· Prototipe subrutin dengan karakter Unicode di atas U+00FF rusak selama
kloning penutupan. Ini akan terjadi dengan subrutin menutup variabel leksikal
dideklarasikan di luar, dan dengan sub leksikal.

· "UNIVERSAL::can" sekarang memperlakukan argumen pertamanya dengan cara yang sama seperti pemanggilan metode:
Typeglobs dan referensi glob dengan slot IO yang tidak kosong diperlakukan sebagai pegangan, dan
string diperlakukan sebagai pegangan file, bukan paket, jika pegangan dengan nama itu
ada [perl #113932].

· Metode pemanggilan pada typeglobs (misalnya, "*ARGV->getline") digunakan untuk merangkai typeglob dan
kemudian mencarinya lagi. Dikombinasikan dengan perubahan pada Perl 5.18.0, ini memungkinkan "*foo->bar"
untuk memanggil metode pada paket "foo" (seperti "foo->bar"). Dalam beberapa kasus dapat menyebabkan
metode yang akan dipanggil pada pegangan yang salah. Sekarang argumen typeglob diperlakukan sebagai
handle (seperti "(\*foo)->bar"), atau, jika slot IO-nya kosong, akan muncul error.

· Menetapkan vstring ke variabel terikat atau argumen subrutin alias ke a
elemen hash atau array yang tidak ada sekarang berfungsi, tanpa meratakan vstring menjadi a
tali biasa.

· "pos", "tie", "tie" dan "untie" tidak berfungsi dengan baik pada argumen subrutin alias
ke elemen hash dan array yang tidak ada [perl #77814, #27010].

· Operator panah gemuk "=>" sekarang dapat mengutip kata kunci bawaan meskipun itu muncul di
baris berikutnya, membuatnya konsisten dengan bagaimana ia memperlakukan kata-kata kosong lainnya.

· Menghidupkan otomatis rintisan subrutin melalui "\&$glob" mulai menyebabkan kerusakan di Perl 5.18.0
jika $glob hanyalah salinan dari glob nyata, yaitu, skalar yang memiliki glob
ditugaskan untuk itu. Ini telah diperbaiki. [perl #119051]

· Perl biasa membocorkan detail implementasi saat merujuk pada pengembalian
nilai operator tertentu. "for ($a+$b) { warn \$_; warn \$_ }" digunakan untuk menampilkan dua
alamat memori yang berbeda, karena operator "\" sedang menyalin variabel. Dibawah
build berulir, itu juga akan terjadi untuk konstanta ("untuk(1) { ... }"). Ini telah
tetap. [perl #21979, #78194, #89188, #109746, #114838, #115388]

· Operator jangkauan ".." mengembalikan skalar yang dapat dimodifikasi yang sama dengan setiap panggilan,
kecuali itu adalah satu-satunya di header loop "foreach". Ini berarti bahwa perubahan menjadi
nilai dalam daftar yang dikembalikan akan terlihat saat operator berikutnya
dieksekusi. [perl #3105]

· Pelipatan konstan dan inlining subrutin tidak lagi menyebabkan operasi yang akan
biasanya mengembalikan skalar baru yang dapat dimodifikasi untuk mengembalikan nilai hanya-baca.

· Penutupan formulir "sub () { $some_variable }" tidak lagi sebaris, menyebabkan
perubahan pada variabel yang akan diabaikan oleh pemanggil subrutin. [perl #79908]

· Mengembalikan nilai dari operator tertentu seperti "ref" kadang-kadang akan dibagi antara
panggilan rekursif ke subrutin yang sama, menyebabkan panggilan dalam mengubah nilainya
dikembalikan oleh "ref" di panggilan luar. Ini telah diperbaiki.

· "__PACKAGE__" dan konstanta yang mengembalikan nama paket atau kunci hash sekarang konsisten
hanya-baca. Dalam berbagai rilis Perl sebelumnya, mereka telah menjadi bisa berubah di bawah tertentu
keadaan.

· Mengaktifkan peringatan "digunakan sekali" tidak lagi menyebabkan crash pada lingkaran simpanan yang dibuat
pada waktu kompilasi ("*Foo::Bar::Foo:: = *Foo::").

· Konstanta undef yang digunakan dalam kunci hash ("gunakan konstanta u => undef; $h{+u}") tidak lagi
menghasilkan peringatan "tidak diinisialisasi" pada waktu kompilasi.

· Memodifikasi target substitusi di dalam penggantian substitusi tidak lagi menyebabkan
crash.

· Pernyataan pertama di dalam eval string digunakan untuk menggunakan pengaturan pragma yang salah
kadang-kadang selama lipat konstan. "eval 'uc chr 0xe0'" akan dipilih secara acak di antara
Unicode, byte, dan semantik lokal. Ini telah diperbaiki.

· Penanganan nilai kembalian filter @INC (subrutin yang dikembalikan oleh subrutin di
@INC) telah diperbaiki dengan berbagai cara. Variabel terikat sebelumnya salah ditangani, dan
menyetel $_ ke referensi atau typeglob dapat mengakibatkan crash.

· Fungsi XS "SvPVbyte" telah diperbaiki agar berfungsi dengan skalar terikat kembali
sesuatu selain string. Dulu mengembalikan utf8 dalam kasus di mana "SvPV"
akan.

· Perl 5.18.0 secara tidak sengaja membuat "--" dan "++" crash pada dereferenced reguler
ekspresi, dan menghentikan "++" dari meratakan vstrings.

· "berkah" tidak lagi mati dengan "Tidak dapat memberkati nilai non-referensi" jika argumen pertamanya adalah
referensi terikat.

· "reset" dengan argumen tidak lagi melewatkan skalar copy-on-write, ekspresi reguler,
salinan typeglob, dan vsstrings. Juga, ketika menemukan nilai-nilai itu atau hanya-baca, itu
tidak lagi melewatkan larik atau hash apa pun dengan nama yang sama.

· "reset" dengan argumen sekarang melewatkan skalar alias ke typeglobs ("for $z (*foo) {
reset "z" }"). Sebelumnya akan merusak memori atau crash.

· "ucfirst" dan "lcfirst" tidak menghormati pragma byte. Ini adalah regresi
dari Perl 5.12. [perl #117355]

· Perubahan ke "UNIVERSAL::DESTROY" sekarang perbarui cache DESTROY di semua kelas, bukan
menyebabkan kelas yang telah memiliki objek yang dihancurkan untuk terus menggunakan sub lama.
Ini adalah regresi di Perl 5.18. [perl #114864]

· Semua kejadian positif palsu yang diketahui dari peringatan penghentian "Penggunaan '\' yang tidak berguna;
tidak lolos dari metakarakter '%c'", ditambahkan di Perl 5.18.0, telah dihapus. [perl
# 119101]

· Nilai $^E sekarang disimpan di seluruh penangan sinyal di Windows. [perl #85104]

· Pegangan file leksikal (seperti dalam "buka $fh saya...") biasanya diberi nama berdasarkan
paket saat ini dan nama variabel, misalnya "main::$fh". Di bawah rekursi,
filehandle kehilangan bagian "$fh" dari namanya. Ini telah diperbaiki.

· Nilai yang tidak diinisialisasi yang dikembalikan oleh XSUB tidak lagi dikecualikan dari yang tidak diinisialisasi
peringatan. [perl #118693]

· "elsif ("")" tidak lagi secara keliru menghasilkan peringatan tentang konteks batal. [perl
# 118753]

· Melewati "undef" ke subrutin sekarang menyebabkan @_ berisi read-only undefined yang sama
skalar yang "undef" kembali. Selanjutnya, "exists $_[0]" sekarang akan mengembalikan true jika
"undef" adalah argumen pertama. [perl #7508, #109726]

· Melewati elemen array yang tidak ada ke subrutin biasanya tidak secara otomatis menghidupkannya
kecuali subrutin memodifikasi argumennya. Ini tidak bekerja dengan benar dengan
indeks negatif dan dengan elemen yang tidak ada dalam array. Elemen akan
segera dihidupkan. Penghidupan yang tertunda telah diperpanjang untuk bekerja dengan
itu. [perl #118691]

· Menetapkan referensi atau gumpalan ke skalar yang dikembalikan oleh $#foo setelah array @foo
telah dibebaskan tidak lagi menyebabkan kegagalan pernyataan pada build debug dan kebocoran memori pada
bangunan biasa.

· Pada platform 64-bit, rentang besar seperti 1..1000000000000 tidak lagi crash, tetapi memakan habis
semua memori Anda sebagai gantinya. [perl #119161]

· "__DATA__" sekarang menempatkan pegangan "DATA" dalam paket yang tepat, meskipun saat ini
paket telah diubah namanya melalui penugasan glob.

· Ketika "mati", "terakhir", "berikutnya", "ulangi", "goto" dan "keluar" lepaskan ruang lingkup, itu mungkin
untuk "HANCURKAN" secara rekursif untuk memanggil subrutin atau format yang saat ini sedang
keluar. Kalau begitu, terkadang variabel leksikal di dalam sub akan mulai keluar
memiliki nilai dari panggilan luar, alih-alih tidak terdefinisi sebagaimana mestinya. Ini
telah diperbaiki. [perl #119311]

· ${^MPEN} tidak lagi diperlakukan sebagai sinonim untuk ${^MATCH}.

· Perl sekarang mencoba sedikit lebih keras untuk mengembalikan nomor saluran yang benar di "(penelepon) [2]".
[perl #115768]

· Nomor baris di dalam operator seperti kutipan multiline sekarang dilaporkan dengan benar. [perl
# 3643]

· Direktif "#line" di dalam kode yang disematkan di operator seperti kutipan sekarang dihormati.

· Nomor baris sekarang benar di dalam dokumen-sini kedua ketika dua penanda dokumen-disini
terjadi pada baris yang sama.

· Sebuah optimasi di Perl 5.18 membuat asumsi yang salah menyebabkan interaksi yang buruk dengan
modul CPAN Devel::CallParser. Jika modul dimuat maka variabel leksikal
dideklarasikan dalam pernyataan terpisah setelah daftar "saya(...)" mungkin gagal untuk dihapus pada
keluar ruang lingkup.

· Panggilan &xsub dan "goto &xsub" sekarang memungkinkan subrutin yang dipanggil untuk menghidupkan elemen secara otomatis
@_.

· &xsub dan "goto &xsub" tidak lagi mogok jika *_ tidak ditentukan dan tidak memiliki entri ARRAY
(yaitu @_ tidak ada).

· &xsub dan "goto &xsub" sekarang berfungsi dengan @_ terikat.

· Pengidentifikasi yang terlalu panjang tidak lagi menyebabkan buffer overflow (dan crash). Mereka memulai
melakukannya di Perl 5.18.

· Peringatan "Nilai skalar @hash{foo} lebih baik ditulis sebagai $hash{foo}" sekarang menghasilkan jauh
positif palsu lebih sedikit. Secara khusus, @hash{+function_returning_a_list} dan @hash{ qw
"foo bar baz" } tidak lagi memperingatkan. Hal yang sama berlaku untuk irisan array. [perl #28380,
# 114024]

· "$! = EINVAL; tunggupid(0, WNOHANG);" tidak lagi masuk ke loop tak terbatas internal.
[perl #85228]

· Kemungkinan kesalahan segmentasi dalam duplikasi filehandle telah diperbaiki.

· Subrutin di @INC dapat mengembalikan referensi ke skalar yang berisi inisial
isi file. Namun, skalar itu dibebaskan sebelum waktunya jika tidak dirujuk
di tempat lain, memberikan hasil acak.

· "terakhir" tidak lagi mengembalikan nilai yang telah dikumpulkan oleh pernyataan yang sama sejauh ini, memperbaiki
antara lain bug lama yang "push @a, last" akan mencoba untuk kembali
@a, menyalinnya seperti skalar dalam proses dan menghasilkan kesalahan, "Aneh
salinan ARRAY terakhir." [perl #3112]

· Dalam beberapa kasus, menangani file penutup dibuka ke pipa ke atau dari suatu proses, yang telah
telah diduplikasi menjadi pegangan standar, akan memanggil pembungkus waitpid internal Perl
dengan pid nol. Dengan perbaikan untuk [perl #85228] pid nol ini diteruskan ke
"waitpid", mungkin memblokir proses. Ini menunggu proses nol tidak lagi
terjadi. [perl #119893]

· "pilih" digunakan untuk mengabaikan sihir pada argumen keempat (batas waktu), yang mengarah ke efek
seperti pemblokiran "pilih" tanpa batas waktu daripada waktu tidur yang diharapkan. Ini mempunyai
sekarang telah diperbaiki. [perl #120102]

· Nama kelas di "untuk kelas saya $foo" sekarang diurai dengan benar. Dalam kasus
karakter kedua dari nama kelas diikuti oleh angka (misalnya 'a1b') ini digunakan untuk
berikan kesalahan "Missing $ on loop variable". [perl #120112]

· Perl 5.18.0 secara tidak sengaja melarang "-bareword" di bawah "gunakan ketat" dan "gunakan bilangan bulat".
Ini telah diperbaiki. [perl #120288]

· "-a" di awal baris (atau tanda hubung dengan huruf apa pun yang bukan filetest
operator) tidak lagi menghasilkan kesalahan 'Penggunaan "-a" tanpa tanda kurung adalah
peringatan ambigu. [perl #120288]

· Konteks nilai sekarang disebarkan dengan benar ke blok kosong dan blok "jika" dan "lain"
dalam lvalue subrutin. Sebelumnya, array dan hash terkadang salah
diratakan ketika dikembalikan dalam konteks daftar nilai, atau kesalahan "Salinan aneh" dapat terjadi.
[perl #119797]

· Konteks nilai sekarang disebarkan ke cabang "||" dan "&&" (dan mereka
setara abjad, "atau" dan "dan"). Ini berarti "foreach (pos $x || pos $y)
{...}" sekarang memungkinkan "pos" untuk dimodifikasi melalui $_.

· "stat" dan "readline" mengingat pegangan terakhir yang digunakan; mantan untuk "_" spesial
filehandle, yang terakhir untuk "${^LAST_FH}". "eval "*foo if 0"" di mana *foo adalah yang terakhir
pegangan yang diteruskan ke "stat" atau "readline" dapat menyebabkan pegangan itu dilupakan jika
pegangan belum dibuka. Ini telah diperbaiki.

· Berbagai kasus "delete $::{a}", "delete $::{ENV}" dll. yang menyebabkan crash telah
tetap. [perl #54044]

· Pengaturan $! ke EACCESS sebelum memanggil "require" dapat memengaruhi perilaku "require".
Ini telah diperbaiki.

· Pesan peringatan "Tidak dapat menggunakan \1 berarti $1 dalam ekspresi" sekarang hanya muncul di
bagian kanan (penggantian) dari substitusi. Sebelumnya itu bisa terjadi dalam kode
tertanam di sisi kiri, atau di operator seperti kutipan lainnya.

· Memberkati menjadi referensi ("berkah $thisref, $thatref") telah lama dilarang, tetapi
skalar magis untuk yang kedua seperti $/ dan yang terikat dikecualikan. Mereka tidak lagi
adalah. [perl #119809]

· Memberkati menjadi referensi secara tidak sengaja diperbolehkan di 5.18 jika argumen kelasnya
referensi yang diberkati dengan cache metode basi (yaitu, kelas yang memiliki subs yang ditentukan
sejak pemanggilan metode terakhir). Mereka dianulir sekali lagi, seperti pada 5.16.

· "$x->{key}" di mana $x dideklarasikan sebagai "Kelas saya $x" tidak lagi crash jika
Subrutin kelas::FIELDS telah dideklarasikan.

· @$obj{'key'} dan "${$obj}{key}" dulunya dikecualikan dari pemeriksaan bidang waktu kompilasi
("Tidak ada bidang kelas seperti itu"; lihat bidang) tetapi tidak lagi.

· Elemen array yang tidak ada dengan indeks besar diteruskan ke subrutin yang mengikat
array dan kemudian mencoba mengakses elemen tidak lagi menghasilkan crash.

· Mendeklarasikan rintisan subrutin bernama NEGATIVE_INDICES tidak lagi membuat larik negatif
indeks macet ketika paket saat ini adalah kelas array terikat.

· Mendeklarasikan rintisan subrutin "memerlukan", "glob", atau "melakukan" dalam paket CORE::GLOBAL::
tidak lagi membuat kompilasi panggilan ke fungsi yang sesuai macet.

· Aliasing CORE::GLOBAL:: fungsi ke konstanta berhenti bekerja di Perl 5.10 tetapi memiliki
sekarang telah diperbaiki.

· Ketika "`...`" atau "qx/.../" memanggil override "readpipe", interpolasi tanda kutip ganda
sekarang terjadi, seperti halnya ketika tidak ada override. Sebelumnya, kehadiran an
override akan membuat operator seperti kutipan ini bertindak seperti "q{}", menekan
interpolasi. [perl #115330]

· "<<<`...`" here-docs (dengan backticks sebagai pembatas) sekarang memanggil override "readpipe".
[perl #119827]

· "&CORE::exit()" dan "&CORE::die()" sekarang menghormati petunjuk vmsish.

· Membatalkan definisi glob yang memicu metode DESTROY yang tidak mendefinisikan glob yang sama sekarang
aman. Itu digunakan untuk menghasilkan peringatan "Mencoba membebaskan penunjuk glob yang tidak direferensikan" dan
kebocoran memori.

· Jika pendefinisian ulang subrutin ("eval 'sub foo{}'" atau "newXS" untuk kode XS) memicu
HANCURKAN metode pada sub yang sedang didefinisikan ulang, dan metode itu menetapkan a
subrutin ke slot yang sama ("*foo = sub {}"), $_[0] tidak lagi menunjuk ke
skalar yang dibebaskan. Sekarang DESTROY ditunda hingga subrutin baru telah diinstal.

· Di Windows, Perl tidak lagi menelepon TutupPegangan() pada pegangan soket. Ini membuat
debugging lebih mudah di Windows dengan menghapus pengecualian penanganan buruk yang tidak relevan. Dia
juga memperbaiki kondisi balapan yang membuat fungsi soket gagal secara acak dalam proses Perl
dengan beberapa utas OS, dan kemungkinan kegagalan pengujian di
dist/IO/t/cachepropagate-tcp.t. [perl #120091/118059]

· Format yang melibatkan string yang disandikan UTF-8, atau var aneh seperti dasi, kelebihan beban, atau
referensi string (dan dalam perls baru-baru ini, vars NOK murni) umumnya akan melakukan kesalahan
hal dalam format ketika var diperlakukan sebagai string dan berulang kali dipotong, seperti dalam
"^<<<<~~" dan sejenisnya. Ini sekarang telah diselesaikan. [perl
#33832/45325/113868/119847/119849/119851]

· "semctl(..., SETVAL, ...)" akan mengatur semaphore ke 32-bit teratas dari yang disediakan
integer alih-alih 32-bit terbawah pada sistem big-endian 64-bit. [perl #120635]

· "readdir()" sekarang hanya menetapkan $! pada kesalahan. $! tidak lagi disetel ke "EBADF" saat itu
mengakhiri "undef" dibaca dari direktori kecuali jika panggilan sistem menetapkan $!. [perl
# 118651]

· &CORE::glob tidak lagi menyebabkan crash intermiten karena tumpukan Perl semakin
rusak. [perl #119993]

· "buka" dengan lapisan yang memuat modul (misalnya, "<:encoding(utf8)") tidak lagi menjalankan
risiko mogok karena korupsi tumpukan.

· Perl 5.18 merusak pemuatan otomatis melalui panggilan metode "->SUPER::foo" dengan mencari AUTOLOAD
dari paket saat ini daripada superclass paket saat ini. ini telah
tetap. [perl #120694]

· Bug lama yang menyebabkan "lakukan {} hingga CONSTANT", di mana konstanta tersebut bernilai benar
nilai, untuk membaca memori yang tidak terisi telah diselesaikan. Ini biasanya akan terjadi setelah
kesalahan sintaks. Dalam versi Perl yang lalu, ia mengalami crash sebentar-sebentar. [perl #72406]

· Perbaiki HP-UX $! kegagalan. HP-UX kesalahan() mengembalikan string kosong untuk kesalahan yang tidak diketahui
kode. Ini menyebabkan pernyataan gagal di bawah DEBUGGING build. Sekarang sebagai gantinya,
string yang dikembalikan untuk "$!" berisi teks yang menunjukkan kode tersebut untuk kesalahan yang tidak diketahui.

· Elemen-elemen @INC yang terikat secara individual (seperti dalam "tie $INC[0]...") sekarang ditangani dengan benar.
Sebelumnya, apakah sub yang dikembalikan oleh elemen terikat seperti itu akan diperlakukan sebagai sub
tergantung pada apakah FETCH telah terjadi sebelumnya.

· "getc" pada pegangan berukuran byte setelah operator "getc" yang sama digunakan pada utf8
pegangan yang digunakan untuk memperlakukan byte sebagai utf8, menghasilkan perilaku yang tidak menentu (misalnya, salah bentuk
peringatan UTF-8).

· Awal "{" di awal baris argumen format selalu ditafsirkan sebagai
awal blok sebelum v5.18. Di Perl v5.18, itu mulai diperlakukan sebagai
tanda yang ambigu. Pengurai akan menebak apakah itu seharusnya anonim
konstruktor hash atau blok berdasarkan konten. Sekarang perilaku sebelumnya telah
telah dipulihkan. [perl #119973]

· Di Perl v5.18 "undef *_; goto &sub" dan "local *_; goto &sub" mulai mogok. Ini
telah diperbaiki. [perl #119949]

· Backticks (" `` " atau " qx// ") yang digabungkan dengan beberapa utas pada Win32 dapat mengakibatkan
output dikirim ke stdout pada satu utas yang ditangkap oleh backticks dari perintah eksternal
di utas lain.

Ini bisa terjadi untuk proses pseudo-fork juga, karena pseudo-fork Win32 adalah
diimplementasikan dalam hal benang. [perl #77672]

· "open $fh, ">+", undef" tidak lagi membocorkan memori ketika TMPDIR diatur tetapi menunjuk ke a
direktori tempat file sementara tidak dapat dibuat. [perl #120951]

· " untuk ( $h{k} || '' ) " tidak lagi menghidupkan $h{k} secara otomatis. [perl #120374]

· Pada mesin Windows, Perl sekarang mengemulasi penggunaan lingkungan POSIX untuk lokal
inisialisasi. Sebelumnya, lingkungan diabaikan. Lihat "LINGKUNGAN" di
perlokal.

· Memperbaiki kerusakan saat menghancurkan GLOB referensi diri. [perl #121242]

Diketahui Masalah


· IO::Socket diketahui gagal dalam pengujian pada AIX 5.3. Ada patchnya
di pelacak permintaan, #120835,
yang dapat diterapkan untuk rilis mendatang.

· Modul berikut diketahui memiliki kegagalan pengujian dengan versi Perl ini.
Patch telah dikirimkan, jadi semoga akan segera ada rilis baru:

· Data::Struktur::Util versi 0.15

· HTML::StripScripts versi 1.05

· Daftar::Kumpulkan versi 0.08.

Berita kematian


Diana Rosa, 27, dari Rio de Janeiro, pergi untuk istirahat panjang pada 10 Mei 2014, bersama dengan
unta mewah dia terus tergantung di layar komputernya sepanjang waktu. Dia adalah seorang yang bersemangat
Perl hacker yang menyukai bahasa dan komunitasnya, dan yang tidak pernah melewatkan acara Rio.pm.
Dia adalah seniman sejati, penggila menulis kode, menyanyi arias, dan grafiti
dinding. Kami tidak akan pernah melupakanmu.

Greg McCarroll meninggal pada 28 Agustus 2013.

Greg terkenal karena banyak alasan bagus. Dia adalah salah satu penyelenggara yang pertama
YAPC::Eropa, yang diakhiri dengan lelang tak terjadwal di mana dia dengan panik mencoba
mengumpulkan uang ekstra untuk menghindari konferensi membuat kerugian. Greg yang salah
tiba untuk pertemuan london.pm terlambat seminggu; beberapa tahun kemudian dialah yang menjual
pilihan tanggal pertemuan resmi di YAPC::Lelang Eropa, dan akhirnya sama mulianya
pemimpin london.pm dia mewarisi kebingungan yang tidak sopan yang telah dia buat.

Selalu membantu, ramah dan ceria optimis, Anda akan dirindukan, tetapi tidak pernah
terlupakan.

Ucapan Terima Kasih


Perl 5.20.0 mewakili sekitar 12 bulan pengembangan sejak Perl 5.18.0 dan
berisi sekitar 470,000 baris perubahan di 2,900 file dari 124 penulis.

Tidak termasuk file yang dibuat secara otomatis, dokumentasi, dan alat rilis, ada sekitar
280,000 baris perubahan ke file 1,800 .pm, .t, .c dan .h.

Perl terus berkembang hingga dekade ketiga berkat komunitas pengguna yang dinamis
dan pengembang. Orang-orang berikut diketahui telah berkontribusi dalam peningkatan yang:
menjadi Perl 5.20.0:

Aaron Crane, Abhijit Menon-Sen, Abigail, Abir Viqar, Alan Haggai Alavi, Alan Hourihane,
Alexander Voronov, Alexandr Ciornii, Andy Dougherty, Anno Siegel, Aristoteles Pagaltzis,
Arthur Axel 'fREW' Schmidt, Brad Gilbert, Brendan Byrd, Brian Childs, Brian Fraser, Brian
Gottreu, Chris 'BinGOs' Williams, Christian Millour, Colin Kuskie, Craig A. Berry, Dabrien
'Dabe' Murphy, Dagfinn Ilmari Mannsaaker, Daniel Dragan, Darin McBride, David Golden,
David Leadbeater, David Mitchell, David Nicol, David Steinbrunner, Dennis Kaarsemaker,
Dominic Hargreaves, Ed Avis, Eric Brine, Evan Zacks, Pastor Chrysostomos, Florian Ragwitz,
Francois Perrad, Gavin Shelley, Gideon Israel Dsouza, Gisle Aas, Graham Knop, H.Merijn
Merek, Hauke ​​D, Heiko Eissfeldt, Hiroo Hayashi, Hojung Youn, James E Keenan, Jarkko
Hietaniemi, Jerry D. Hedden, Jess Robinson, Jesse Luehrs, Johan Vromans, John Gardiner
Myers, John Goodyear, John P. Linderman, John Peacock, kafka, Kang-min Liu, Karen
Etheridge, Karl Williamson, Keedi Kim, Kent Fredric, kevin dawson, Kevin Falcone, Kevin
Ryde, Leon Timmermans, Lukas Mai, Marc Simpson, Marcel Gruenauer, Marco Peereboom, Marcus
Holland-Moritz, Mark Jason Dominus, Martin McGrath, Matthew Horsfall, Max Maischein, Mike
Doherty, Moritz Lenz, Nathan Glenn, Nathan Trapuzzano, Neil Bowers, Neil Williams,
Nicholas Clark, Niels Thykier, Niko Tyni, Olivier Mengue, Owain G. Ainsworth, Paul Green,
Paul Johnson, Peter John Acklam, Peter Martini, Peter Rabbitson, Petr PisaX, Philip
Boulain, Philip Guenther, Piotr Roszatycki, Rafael Garcia-Suarez, Reini Urban, Reuben
Thomas, Ricardo Signes, Ruslan Zakirov, Sergey Alekseev, Shirakata Kentaro, Ikan Shlomi,
Slaven Rezic, Smylers, Steffen Mueller, Steve Hay, Sullivan Beck, Thomas Sibley, Tobias
Leich, Toby Inkster, Tokuhiro Matsuno, Tom Christiansen, Tom Hukins, Tony Cook, Victor
Efimov, Viktor Turskyi, Vladimir Timofeev, YAMASHINA Hio, Yves Orton, Zefram, Zsban
Ambrus, AEvar Arnfjoer` Bjarmason.

Daftar di atas hampir pasti tidak lengkap karena dibuat secara otomatis dari
riwayat kontrol versi. Secara khusus, itu tidak termasuk nama-nama (sangat banyak)
dihargai) kontributor yang melaporkan masalah ke pelacak bug Perl.

Banyak perubahan yang disertakan dalam versi ini berasal dari modul CPAN yang disertakan dalam
inti Perl. Kami berterima kasih kepada seluruh komunitas CPAN karena telah membantu Perl berkembang.

Untuk daftar yang lebih lengkap dari semua kontributor sejarah Perl, silakan lihat PENULIS
file dalam distribusi sumber Perl.

Pelaporan Bug


Jika Anda menemukan apa yang menurut Anda bug, Anda dapat memeriksa artikel yang baru-baru ini diposting ke
comp.lang.perl.misc newsgroup dan database bug perl di http://rt.perl.org/perlbug/ .
Mungkin juga ada informasi di http://www.perl.org/ , Halaman Beranda Perl.

Jika Anda yakin memiliki bug yang tidak dilaporkan, jalankan program perlbug yang disertakan dengan
rilis Anda. Pastikan untuk memangkas bug Anda menjadi test case yang kecil tapi cukup. Bugmu
laporan, bersama dengan output dari "perl -V", akan dikirim ke [email dilindungi] menjadi
dianalisis oleh tim porting Perl.

Jika bug yang Anda laporkan memiliki implikasi keamanan, yang membuatnya tidak pantas untuk
kirim ke milis yang diarsipkan secara publik, lalu kirimkan ke
[email dilindungi]. Ini menunjuk ke langganan tertutup surat yang tidak diarsipkan
daftar, yang mencakup semua pembuat komitmen inti, yang akan dapat membantu menilai dampaknya
masalah, mencari solusi, dan membantu mengoordinasikan rilis tambalan untuk
mengurangi atau memperbaiki masalah di semua platform yang mendukung Perl. Harap hanya
gunakan alamat ini untuk masalah keamanan di inti Perl, bukan untuk modul secara mandiri
didistribusikan di CPAN.

Gunakan perl5200delta online menggunakan layanan onworks.net


Server & Workstation Gratis

Unduh aplikasi Windows & Linux

  • 1
    pass autentikasi
    pass autentikasi
    AuthPass adalah kata sandi sumber terbuka
    manajer dengan dukungan untuk yang populer dan
    Keepass terbukti (kdbx 3.x DAN kdbx 4.x ...
    Unduh authpass.dll
  • 2
    Zabbix
    Zabbix
    Zabbix adalah kelas perusahaan terbuka
    solusi pemantauan terdistribusi sumber
    dirancang untuk memantau dan melacak
    kinerja dan ketersediaan jaringan
    server, perangkat...
    Unduh Zabbix.dll
  • 3
    KDiff3
    KDiff3
    Repositori ini tidak lagi dipertahankan
    dan disimpan untuk tujuan arsip. Melihat
    https://invent.kde.org/sdk/kdiff3 for
    kode terbaru dan
    https://download.kde.o...
    Unduh KDiff3
  • 4
    USBLoaderGX
    USBLoaderGX
    USBLoaderGX adalah GUI untuk
    USB Loader Waninkoko, berdasarkan
    libwiigui. Ini memungkinkan daftar dan
    meluncurkan game Wii, game Gamecube, dan
    homebrew di Wii dan WiiU...
    Unduh USBLoaderGX.dll
  • 5
    Burung api
    Burung api
    Firebird RDBMS menawarkan fitur ANSI SQL
    & berjalan di Linux, Windows &
    beberapa platform Unix. Fitur
    konkurensi & kinerja yang sangat baik
    & kekuasaan...
    Unduh Firebird.dll
  • 6
    KompoZer
    KompoZer
    KompoZer adalah editor HTML wysiwyg menggunakan
    basis kode Mozilla Composer. Sebagai
    Pengembangan Nvu telah dihentikan
    pada tahun 2005, KompoZer memperbaiki banyak bug dan
    menambahkan f...
    Unduh KompoZer.dll
  • Lebih banyak lagi »

Perintah Linux

Ad