Ini ialah arahan perl5200delta yang boleh dijalankan dalam penyedia pengehosan percuma OnWorks menggunakan salah satu daripada berbilang stesen kerja dalam talian percuma kami seperti Ubuntu Online, Fedora Online, emulator dalam talian Windows atau emulator dalam talian MAC OS.
JADUAL:
NAMA
perl5200delta - apa yang baharu untuk perl v5.20.0
DESCRIPTION
Dokumen ini menerangkan perbezaan antara keluaran 5.18.0 dan keluaran 5.20.0.
Jika anda menaik taraf daripada keluaran terdahulu seperti 5.16.0, baca dahulu perl5180delta,
yang menerangkan perbezaan antara 5.16.0 dan 5.18.0.
Teras tambahan
Eksperimen Subrutin tandatangan
Sintaks deklaratif untuk membuka senarai hujah ke dalam pembolehubah leksikal. "sub foo ($a,$b)
{...}" menyemak bilangan argumen dan meletakkan argumen ke dalam pembolehubah leksikal.
Tandatangan tidak bersamaan dengan simpulan bahasa sedia ada "sub foo { my($a,$b) = @_; ... }".
Tandatangan hanya tersedia dengan mendayakan ciri bukan lalai dan menjana amaran
tentang menjadi eksperimen. Pertembungan sintaksis dengan prototaip diuruskan dengan melumpuhkan
sintaks prototaip pendek apabila tandatangan didayakan.
Lihat "Tandatangan" dalam perlsub untuk mendapatkan butiran.
"sub" s kini mengambil a "prototaip" atribut
Apabila mengisytiharkan atau mentakrifkan "sub", prototaip kini boleh ditentukan di dalam a
atribut "prototaip" bukannya dalam ibu bapa mengikut nama.
Contohnya, "sub foo($$){}" boleh ditulis semula sebagai "sub foo : prototype($$){}".
Lagi konsisten prototaip parsing
Koma berbilang berbilang dalam prototaip subrutin telah lama diterima dan dianggap sebagai a
koma bertitik tunggal. Terdapat satu kes di mana ini tidak berlaku. Subrutin yang
prototaip bermula dengan "*" atau ";*" boleh menjejaskan sama ada kata kosong dianggap sebagai kaedah
nama atau subpanggilan. Ini kini terpakai juga pada ";;;*".
Ruang kosong telah lama dibenarkan di dalam prototaip subrutin, jadi "sub( $ $ )" adalah
bersamaan dengan "sub($$)", tetapi sehingga kini ia telah dilucutkan apabila subrutin dihuraikan.
Oleh itu, ruang putih adalah tidak dibenarkan dalam prototaip yang ditetapkan oleh "Scalar::Util::set_prototype". Sekarang
ia dibenarkan, dan penghurai tidak lagi memotong ruang putih. Ini bermakna "prototaip
&mysub" mengembalikan prototaip asal, ruang kosong dan semua.
"rand" kini menggunakan a konsisten rawak nombor penjana
Sebelum ini perl akan menggunakan penjana nombor rawak khusus platform, berbeza-beza antara
libc rand (), rawak () or drand48().
Ini bermakna bahawa kualiti nombor rawak perl akan berbeza-beza dari platform ke platform,
daripada 15 bit rand () pada Windows kepada 48-bit pada platform POSIX seperti Linux dengan
drand48().
Perl kini menggunakan dalaman sendiri drand48() pelaksanaan pada semua platform. Ini tidak
jadikan "rand" perl selamat secara kriptografi. [perl #115928]
Baru keping sintaks
Sintaks %hash{...} dan %array[...] baharu mengembalikan senarai kunci/nilai (atau indeks/nilai)
berpasangan. Lihat "Kepingan Hash Kunci/Nilai" dalam perldata.
Eksperimen Postfix Penghormatan
Apabila ciri "postderef" berkuat kuasa, kesetaraan sintaksis berikut ditetapkan
up:
$sref->$*; # sama dengan ${ $sref } # interpolate
$aref->@*; # sama seperti @{ $aref } # interpolate
$href->%*; # sama seperti %{ $href }
$cref->&*; # sama seperti &{ $cref }
$gref->**; # sama seperti *{ $gref }
$aref->$#*; # sama seperti $#{ $aref }
$gref->*{ $slot }; # sama seperti *{ $gref }{ $slot }
$aref->@[ ... ]; # sama seperti @$aref[ ... ] # interpolate
$href->@{ ... }; # sama seperti @$href{ ... } # interpolate
$aref->%[ ... ]; # sama seperti %$aref[ ... ]
$href->%{ ... }; # sama seperti %$href{ ... }
Yang ditandakan sebagai interpolasi hanya interpolasi jika ciri "postderef_qq" yang berkaitan ialah
juga didayakan. Ciri ini ialah eksperimen dan akan mencetuskan
"experimental::postderef"-category amaran apabila digunakan, melainkan ia dihalang.
Untuk mendapatkan maklumat lanjut, rujuk bahagian Sintaks Dereference Postfix perlref.
Unicode 6.3 kini disokong
Perl kini menyokong dan dihantar dengan Unicode 6.3 (walaupun Perl boleh dikompilasi semula dengan mana-mana
keluaran Unicode sebelumnya juga). Senarai terperinci perubahan Unicode 6.3 ada di
<http://www.unicode.org/versions/Unicode6.3.0/>.
Baru "\p{Unicode}" kerap ungkapan pola harta
Ini adalah sinonim untuk "\p{Mana-mana}" dan sepadan dengan set titik kod yang ditakrifkan Unikod 0 -
0x10FFFF.
Pilihan Yang 64-bit menyokong
Pada platform 64-bit, fungsi tatasusunan dalaman kini menggunakan offset 64-bit, membolehkan Perl
tatasusunan untuk memegang lebih daripada 2**31 elemen, jika anda mempunyai memori yang tersedia.
Enjin ungkapan biasa kini menyokong rentetan yang lebih panjang daripada 2**31 aksara. [perl
#112790, #116907]
Fungsi PerlIO_get_bufsiz, PerlIO_get_cnt, PerlIO_set_cnt dan PerlIO_set_ptrcnt sekarang
mempunyai SSize_t, bukannya int, mengembalikan nilai dan parameter.
"gunakan tempat" kini kerja-kerja on UTF-8 tempatan
Sehingga keluaran ini, hanya tempat bait tunggal, seperti siri ISO 8859 telah disokong.
Kini, tempat UTF-8 berbilang bait yang semakin biasa juga disokong. Tempatan UTF-8
ialah satu set aksara ialah Unicode dan pengekodan ialah UTF-8. POSIX
Operasi kategori "LC_CTYPE" (perubahan huruf (seperti "lc()", "\U") dan aksara
pengelasan ("\w", "\D", "qr/[[:punct:]]/")) di bawah kerja tempat seperti itu seolah-olah tidak
di bawah locale, tetapi sebaliknya seolah-olah di bawah "use feature 'unicode_strings'", kecuali peraturan taint
diikuti. Pengisihan kekal mengikut susunan titik kod dalam keluaran ini. [perl #56820].
"gunakan tempat" kini menyusun on sistem tanpa tempat-tempat kejadian keupayaan
Sebelum ini melakukan ini menyebabkan program tidak dikompilasi. Dalam skopnya program
berkelakuan seolah-olah dalam tempat "C". Oleh itu program yang ditulis untuk platform yang menyokong setempat
boleh berjalan pada platform tanpa setempat tanpa perubahan. Percubaan untuk menukar tempat yang jauh dari
tempat "C" sudah tentu akan gagal.
Lagi tempat-tempat kejadian pengawalan belakang pilihan
Jika terdapat ralat dengan tempat semasa permulaan Perl, ia segera menyerah dan mencuba
untuk menggunakan tempat "C". Kini ia mula-mula mencuba menggunakan tempat lain yang diberikan oleh persekitaran
pembolehubah, seperti yang diperincikan dalam "ENVIRONMENT" dalam perllocale. Contohnya, jika "LC_ALL" dan
"LANG" kedua-duanya ditetapkan dan menggunakan tempat "LC_ALL" gagal, Perl kini akan mencuba "LANG"
setempat, dan hanya jika gagal, ia akan kembali kepada "C". Pada mesin Windows, Perl akan
cuba, sebelum menggunakan "C", tempat lalai sistem jika semua tempat yang diberikan oleh persekitaran
pembolehubah gagal.
"-DL" runtime pilihan kini tambah khususnya mengesan tempat-tempat kejadian menetapkan
Ini direka untuk pembangun teras Perl untuk membantu dalam pepijat penyahpepijatan medan berkenaan
tempatan
-F kini bererti -a and -a bererti -n
Sebelum ini -F tanpa -a adalah no-op, dan -a tanpa -n or -p adalah no-op, dengan ini
berubah, jika anda membekalkan -F kemudian kedua-duanya -a and -n adalah tersirat dan jika anda membekalkan -a kemudian -n is
tersirat.
Anda masih boleh menggunakan -p untuk tingkah laku tambahannya. [perl #116190]
$a and $b amaran pengecualian
Pembolehubah khas $a dan $b, digunakan dalam "isih", kini dikecualikan daripada amaran "digunakan sekali",
walaupun di mana "sort" tidak digunakan. Ini memudahkan modul CPAN menyediakan fungsi
menggunakan $a dan $b untuk tujuan yang serupa. [perl #120462]
Keselamatan
Mengelakkan mungkin membaca of percuma ()d memori semasa parsing
Ia adalah mungkin bahawa percuma ()d memori boleh dibaca semasa menghuraikan dalam yang luar biasa
keadaan program Perl yang berakhir dengan heredoc dan baris terakhir fail pada
cakera tidak mempunyai aksara baris baharu yang ditamatkan. Ini kini telah ditetapkan.
Tidak serasi Perubahan
"buat" boleh tidak lagi be digunakan kepada memanggil subrutin
Borang "do SUBROUTINE(LIST)" telah menghasilkan amaran penamatan sejak Perl v5.0.0,
dan kini merupakan ralat sintaks.
seperti petikan melarikan diri perubahan
Aksara selepas "\c" dalam rentetan petikan dua kali ("..." atau qq(...)) atau biasa
ungkapan kini mestilah aksara yang boleh dicetak dan mungkin bukan "{".
"{" literal selepas "\B" atau "\b" kini membawa maut.
Ini telah ditamatkan dalam perl v5.14.0.
Mencemarkan berlaku di bawah lebih keadaan; kini menyesuaikan diri kepada dokumentasi
Ini menjejaskan pemadanan ungkapan biasa dan menukar kes rentetan ("lc", "\U",
dan lain-lain.) dalam skop "use locale". Hasilnya kini tercemar berdasarkan operasi,
tidak kira apa kandungan rentetan itu, seperti dokumentasi (perlsec, "SECURITY"
dalam perllocale) menunjukkan ia sepatutnya. Sebelum ini, untuk operasi tukar kes, jika
rentetan tidak mengandungi aksara yang perubahan kesnya boleh dipengaruhi oleh tempat, the
hasilnya tidak akan tercemar. Sebagai contoh, hasil "uc()" pada rentetan kosong atau satu
mengandungi hanya titik kod di atas-Latin1 kini tercemar dan tidak pernah berlaku sebelum ini. Ini membawa kepada
hasil mengotorkan yang lebih konsisten. Corak ungkapan biasa mencemarkan bukan binarinya
keputusan (seperti $&, $2) jika dan hanya jika corak mengandungi unsur yang padanannya bergantung
pada tempat semasa (berpotensi tercemar). Seperti kes menukar fungsi, yang sebenar
kandungan rentetan yang dipadankan sekarang tidak penting, sedangkan sebelumnya ia berlaku. Untuk
contoh, jika corak mengandungi "\w", keputusan akan tercemar walaupun padanan itu tercemar
tidak perlu menggunakan bahagian corak itu untuk berjaya atau gagal, kerana "\w"
perlawanan bergantung pada tempat. Walau bagaimanapun, sebagai contoh, "." dalam corak tidak akan membolehkan
mencemarkan, kerana titik itu sepadan dengan mana-mana aksara tunggal, dan apakah tempat semasa
tidak berubah dalam apa jua cara apa yang sepadan dan apa yang tidak.
"\p{}", "\P{}" sepadan mempunyai berubah khususnya bukan Unicode kod mata.
"\p{}" dan "\P{}" ditakrifkan oleh Unicode hanya pada titik kod yang ditakrifkan Unicode ("U+0000"
melalui "U+10FFFF"). Tingkah laku mereka untuk memadankan titik kod Unikod undang-undang ini ialah
tidak berubah, tetapi terdapat perubahan untuk titik kod 0x110000 dan ke atas. Sebelum ini, Perl
menganggap hasil pemadanan "\p{}" dan "\P{}" dengan ini sebagai "undef", yang
diterjemahkan ke dalam "palsu". Untuk "\P{}", ini kemudiannya dilengkapkan menjadi "true". Amaran
sepatutnya dibangkitkan apabila ini berlaku. Walau bagaimanapun, pelbagai pengoptimuman boleh
menghalang amaran, dan keputusan selalunya berlawanan intuitif, dengan kedua-dua padanan dan
pelengkapnya seolah-olah palsu. Kini semua titik kod bukan Unicode dianggap sebagai
mata kod Unicode biasa yang tidak ditetapkan. Ini secara amnya lebih kepada Do-What-I-Mean. Amaran
dibangkitkan hanya jika hasilnya boleh dikatakan berbeza daripada pendekatan Unicode yang ketat, dan
daripada apa yang pernah Perl lakukan. Kod yang perlu mematuhi Unicode dengan ketat boleh membuat ini
amaran maut, dan kemudian Perl sentiasa menimbulkan amaran.
Butiran ada dalam "Melebihi titik kod Unicode" dalam perlunicode.
"\p{Semua}" mempunyai menjadi berkembang kepada sepadan dengan semua mungkin kod mata
Elemen corak ungkapan biasa yang ditakrifkan Perl "\p{All}", tidak digunakan pada CPAN, digunakan untuk
padankan hanya mata kod Unicode; kini ia sepadan dengan semua mata kod yang mungkin; iaitu ia
adalah bersamaan dengan "qr/./s". Oleh itu "\p{Semua}" tidak lagi sinonim dengan "\p{Mana-mana}", yang
terus memadankan hanya mata kod Unicode, seperti yang dikatakan oleh Unicode.
Data::Dumper's output mungkin menukar
Bergantung pada struktur data yang dibuang dan tetapan yang ditetapkan untuk Data::Dumper, yang dibuang
output mungkin telah berubah daripada versi sebelumnya.
Jika anda mempunyai ujian yang bergantung pada output tepat Data::Dumper, mereka mungkin gagal.
Untuk mengelakkan masalah ini dalam kod anda, uji terhadap struktur data daripada menilai
struktur dibuang, bukannya tempat pembuangan itu sendiri.
Lokal Perpuluhan titik watak tidak lagi kebocoran di luar of "gunakan tempat" skop
Ini sebenarnya pembetulan pepijat, tetapi beberapa kod telah bergantung pada pepijat yang ada, jadi
perubahan ini disenaraikan di sini. Tempat semasa yang dijalankan oleh program ini bukan
sepatutnya kelihatan kepada kod Perl kecuali dalam skop "use locale". Walau bagaimanapun,
sehingga kini dalam keadaan tertentu, aksara yang digunakan untuk titik perpuluhan (selalunya a
koma) bocor di luar skop. Jika kod anda dipengaruhi oleh perubahan ini, cuma tambahkan a
"gunakan tempatan".
Tugasan of Windows soket kesilapan kod kepada $! kini lebih suka errno.h nilai lebih
WSAGetLastError() nilai
Dalam versi Perl sebelumnya, kod ralat soket Windows seperti yang dikembalikan oleh WSAGetLastError()
telah ditugaskan kepada $!, dan beberapa pemalar seperti ECONNABORTED, bukan dalam errno.h dalam VC++ (atau
pelbagai port Windows gcc) telah ditakrifkan kepada nilai WSAE* yang sepadan untuk membolehkan $!
untuk diuji terhadap pemalar E* yang dieksport oleh Errno dan POSIX.
Ini berfungsi dengan baik sehingga VC++ 2010 dan kemudian, yang memperkenalkan pemalar E* baharu dengan nilai
> 100 ke dalam errno.h, termasuk beberapa yang (semula)ditakrifkan oleh perl kepada nilai WSAE*. Itu menyebabkan
masalah apabila memautkan kod XS dengan perpustakaan lain yang menggunakan definisi asal
of errno.h pemalar.
Untuk mengelakkan ketidakserasian ini, perl kini memetakan kod ralat WSAE* kepada nilai E* di mana
mungkin, dan memberikan nilai tersebut kepada $!. Pemalar E* yang dieksport oleh Errno dan POSIX
dikemas kini untuk dipadankan supaya ujian $! terhadap mereka, di mana mungkin sebelum ini, akan
terus berfungsi seperti yang diharapkan, dan semua pemalar E* terdapat dalam errno.h kini dieksport dari
modul tersebut dengan asalnya errno.h nilai-nilai.
Untuk mengelakkan kerosakan dalam kod Perl sedia ada yang memberikan nilai WSAE* kepada $!, perl
kini memintas tugasan dan melakukan pemetaan yang sama kepada nilai E* seperti yang digunakan
secara dalaman apabila menugaskan kepada $! sendiri.
Walau bagaimanapun, satu ketidakserasian ke belakang kekal: kod Perl sedia ada yang membandingkan $!
terhadap nilai berangka kod ralat WSAE* yang sebelum ini diberikan kepada $!
kini akan dipecahkan dalam kes di mana nilai E* yang sepadan telah ditetapkan
sebaliknya. Ini hanya isu untuk nilai E* < 100, yang sentiasa dieksport daripadanya
Errno dan POSIX dengan asalnya errno.h nilai, dan oleh itu tidak boleh digunakan untuk
Ujian kod ralat WSAE* (cth WSAEINVAL ialah 10022, tetapi EINVAL yang sepadan ialah 22). (E*
nilai > 100, jika ada, ditakrifkan semula kepada nilai WSAE*, jadi keserasian boleh
dicapai dengan menggunakan pemalar E*, yang akan berfungsi sebelum dan selepas perubahan ini,
walaupun menggunakan nilai angka yang berbeza di bawah tudung.)
Fungsi "PerlIO_vsprintf" and "PerlIO_sprintf" mempunyai menjadi dikeluarkan
Kedua-dua fungsi ini, tidak didokumenkan, tidak digunakan dalam CPAN, dan bermasalah, telah dialih keluar.
Penghentian
. "/\C/" watak kelas
Kelas aksara ungkapan biasa "/\C/" tidak digunakan lagi. Dari perl 5.22 dan seterusnya
akan menjana amaran, dan dari perl 5.24 dan seterusnya ia akan menjadi ungkapan biasa
ralat penyusun. Jika anda perlu memeriksa bait individu yang membentuk UTF8 yang dikodkan
aksara, kemudian gunakan "utf8::encode()" pada rentetan (atau salinan) dahulu.
Secara harfiah kawalan aksara in berubah-ubah nama
Penamatan ini mempengaruhi perkara seperti $\cT, dengan \cT ialah kawalan literal (seperti "NAK"
atau aksara "NEGATIVE ACKNOWLEDGE") dalam kod sumber. Yang menghairankan, nampaknya begitu
pada asalnya ini bertujuan sebagai cara kanonik untuk mengakses pembolehubah seperti $^T, dengan
borang karet hanya ditambah sebagai alternatif.
Borang kawalan literal sedang ditamatkan atas dua sebab utama. Ia mempunyai apa yang mungkin
pepijat yang tidak boleh diperbaiki, seperti $\cI tidak berfungsi sebagai alias untuk $^I, dan penggunaannya tidak
mudah alih kepada platform bukan ASCII: Walaupun $^T akan berfungsi di mana-mana, \cT ialah ruang putih
EBCDIC. [perl #119123]
Rujukan kepada bukan integer and tidak positif integer in $/
Menetapkan $/ kepada rujukan kepada sifar atau rujukan kepada integer negatif kini ditamatkan,
dan akan berkelakuan sebenarnya seolah-olah ia telah ditetapkan kepada "undef". Jika anda mahu set tingkah laku slurp
$/ kepada "undef" secara eksplisit.
Menetapkan $/ kepada rujukan kepada bukan integer kini dilarang dan akan menimbulkan ralat. Perl
tidak pernah mendokumenkan apa yang akan berlaku dalam konteks ini dan semasa ia digunakan untuk berkelakuan
sama seperti menetapkan $/ kepada alamat rujukan pada masa hadapan ia mungkin berkelakuan berbeza,
jadi kami telah melarang penggunaan ini.
Watak sepadan rutin in POSIX
Penggunaan mana-mana fungsi ini dalam modul "POSIX" kini ditamatkan: "isalnum",
"isalpha", "iscntrl", "isdigit", "isgraph", "islower", "isprint", "ispunct", "isspace",
"isupper", dan "isxdigit". Fungsinya adalah buggy dan tidak berfungsi pada UTF-8 yang dikodkan
rentetan. Lihat penyertaan mereka dalam POSIX untuk maklumat lanjut.
Amaran dibangkitkan pada panggilan pertama kepada mana-mana daripada mereka dari setiap tempat dalam kod yang mereka
dipanggil. (Oleh itu pernyataan berulang dalam gelung akan menimbulkan hanya satu amaran.)
Berasaskan jurubahasa benang adalah kini digalakkan
"Benang berasaskan jurubahasa" yang disediakan oleh Perl bukanlah sistem yang pantas dan ringan
multitasking yang mungkin diharapkan atau diharapkan. Benang dilaksanakan dengan cara yang
menjadikannya mudah untuk disalahgunakan. Beberapa orang tahu cara menggunakannya dengan betul atau akan dapat menggunakannya
memberi bantuan.
Penggunaan benang berasaskan penterjemah dalam perl secara rasmi tidak digalakkan.
Modul penyingkiran
Modul berikut akan dialih keluar daripada pengedaran teras dalam keluaran akan datang, dan
akan pada masa itu perlu dipasang dari CPAN. Pengagihan pada CPAN yang memerlukan
modul ini perlu menyenaraikannya sebagai prasyarat.
Versi teras modul ini kini akan mengeluarkan amaran kategori "ditamatkan" untuk dimaklumkan
anda kepada fakta ini. Untuk menyenyapkan amaran penamatan ini, pasang modul yang berkenaan
dari CPAN.
Ambil perhatian bahawa rancangan penyingkiran modul ini daripada teras tidak menggambarkan penghakiman
tentang kualiti kod dan tidak boleh dianggap sebagai cadangan penggunaannya
terhenti. Pengasingan mereka dari teras terutamanya bergantung pada keperluan mereka untuk bootstrap
pemasangan Perl yang berfungsi sepenuhnya, berkemampuan CPAN, bukan atas kebimbangan terhadap reka bentuk mereka.
CGI dan pakej CGI:: yang berkaitan
inc::terkini
Pakej::Malar
Modul::Bina dan modul yang berkaitan::Bina:: pakej
utiliti penyingkiran
Utiliti berikut akan dialih keluar daripada pengedaran teras dalam keluaran akan datang,
dan pada masa itu perlu dipasang dari CPAN.
find2perl
s2p
a2p
prestasi tambahan
· Perl mempunyai mekanisme salin atas tulis baharu yang mengelakkan keperluan untuk menyalin dalaman
penimbal rentetan apabila menetapkan dari satu skalar ke skalar yang lain. Ini menjadikan penyalinan besar
rentetan kelihatan lebih cepat. Mengubah suai salah satu daripada dua (atau lebih) rentetan selepas an
tugasan akan memaksa salinan secara dalaman. Ini menjadikannya tidak perlu untuk meneruskan rentetan
rujukan untuk kecekapan.
Ciri ini telah tersedia dalam 5.18.0, tetapi tidak didayakan secara lalai. Ia adalah
lalai sekarang, jadi anda tidak lagi perlu membina perl dengan Konfigurasi hujah:
-Accflags=-DPERL_NEW_COPY_ON_WRITE
Ia boleh dilumpuhkan (buat masa ini) dalam binaan perl dengan:
-Accflags=-DPERL_NO_COW
Pada sesetengah sistem pengendalian Perl boleh disusun sedemikian rupa sehingga sebarang percubaan untuk
ubah suai penimbal rentetan yang dikongsi oleh berbilang SV akan ranap. Dengan cara ini penulis XS boleh menguji
bahawa modul mereka mengendalikan skalar salin atas tulis dengan betul. Lihat "Salin pada Tulis" dalam
perlguts untuk perincian.
· Perl mempunyai pengoptimum untuk corak ungkapan biasa. Ia menganalisis corak kepada
cari perkara seperti panjang minimum rentetan yang perlu dipadankan, dsb. Sekarang
lebih baik mengendalikan mata kod yang berada di atas julat Latin1.
· Melaksanakan regex yang mengandungi sauh "^" (atau variannya di bawah bendera "/m")
telah dibuat dengan lebih pantas dalam beberapa situasi.
· Nilai cincang prakiraan kini digunakan di lebih banyak tempat semasa carian kaedah.
· Carian kunci cincang berterusan ($hash{key} berbanding $hash{$key}) telah lama mempunyai
nilai cincang dalaman dikira pada masa penyusunan, untuk mempercepatkan carian. Pengoptimuman ini
hanya kini digunakan pada kepingan cincang juga.
· Gabungan pengendali "dan" dan "atau" dalam konteks kosong, seperti yang dijana untuk "melainkan
($a && $b)" dan "jika ($a || b)" kini litar pintas terus ke penghujung pernyataan.
[perl #120128]
· Dalam situasi tertentu, apabila "kembali" ialah pernyataan terakhir dalam subrutin utama
skop, ia akan dioptimumkan. Ini bermakna kod seperti:
sub baz { return $cat; }
kini akan berkelakuan seperti:
sub baz { $cat; }
yang lebih pantas.
[perl #120765]
· Kod seperti:
$x saya; # atau @x, %x
$y saya;
kini dioptimumkan untuk:
saya ($x, $y);
Dalam kombinasi dengan pengoptimuman padrange yang diperkenalkan dalam v5.18.0, ini bermakna lebih lama
penyataan pembolehubah saya yang tidak dimulakan juga dioptimumkan, jadi:
$x saya; saya @y; %z saya;
menjadi:
saya ($x, @y, %z);
[perl #121077]
· Penciptaan jenis senarai tertentu, termasuk tatasusunan dan kepingan cincang, kini
lebih pantas.
· Pengoptimuman untuk tatasusunan yang diindeks dengan integer malar kecil kini digunakan
integer dalam julat -128..127, bukannya 0..255. Ini sepatutnya mempercepatkan kod Perl
menggunakan ungkapan seperti $x[-1], dengan mengorbankan (mungkin lebih jarang) menggunakan kod
ungkapan seperti $x[200].
· Lelaran pertama ke atas cincang besar (menggunakan "kunci" atau "setiap") kini lebih pantas. Ini adalah
dicapai dengan praperuntukan keadaan lelaran dalaman cincang, bukannya dengan malas
menciptanya apabila cincangan pertama kali diulang. (Untuk cincang kecil, lelaran masih
dicipta hanya apabila pertama kali diperlukan. Andaian ialah cincang kecil lebih berkemungkinan
digunakan sebagai objek, dan oleh itu tidak pernah diperuntukkan. Untuk cincang besar, itu kurang
mungkin benar, dan kos memperuntukkan lelaran dibanjiri oleh kos
memperuntukkan ruang untuk cincang itu sendiri.)
· Apabila melakukan padanan regex global pada rentetan yang datang daripada "garis baca" atau "<>"
operator, data tidak lagi disalin tanpa perlu. [perl #121259]
· Penyahrujukan (seperti dalam "$obj->[0]" atau "$obj->{k}") kini lebih pantas apabila $obj ialah
contoh kelas yang mempunyai kaedah terlebih beban, tetapi tidak membebankan mana-mana
kaedah penyahrujukan "@{}", "%{}", dan sebagainya.
· Pengoptimum Perl tidak lagi melangkau kod pengoptimuman yang mengikuti "eval {}" tertentu
ungkapan (termasuk yang mempunyai gelung tak terhingga yang jelas).
· Pelaksanaan kini melakukan kerja yang lebih baik untuk mengelakkan kerja tidak bermakna pada masa jalan.
Operasi "null" bebas kesan dalaman (dicipta sebagai kesan sampingan menghurai Perl
program) biasanya dipadamkan semasa penyusunan. Pemadaman itu kini digunakan dalam
beberapa situasi yang tidak dikendalikan sebelum ini.
· Perl kini kurang melakukan cakera I/O apabila berurusan dengan sifat Unicode yang meliputi sehingga
tiga julat titik kod berturut-turut.
Modul and Pragmatik
Baru Modul and Pragmatik
· eksperimen 0.007 telah ditambahkan pada teras Perl.
· IO::Socket::IP 0.29 telah ditambahkan pada teras Perl.
dikemaskini Modul and Pragmatik
· Arkib::Tar telah dinaik taraf daripada versi 1.90 kepada 1.96.
· arybase telah dinaik taraf daripada versi 0.06 kepada 0.07.
· Atribut::Pengendali telah dinaik taraf daripada versi 0.94 kepada 0.96.
· atribut telah dinaik taraf daripada versi 0.21 kepada 0.22.
· autodie telah dinaik taraf daripada versi 2.13 kepada 2.23.
· AutoLoader telah dinaik taraf daripada versi 5.73 kepada 5.74.
· autouse telah dinaik taraf daripada versi 1.07 kepada 1.08.
· B telah dinaik taraf daripada versi 1.42 kepada 1.48.
· B::Concise telah dinaik taraf daripada versi 0.95 kepada 0.992.
· B::Debug telah dinaik taraf daripada versi 1.18 kepada 1.19.
· B::Deparse telah dinaik taraf daripada versi 1.20 kepada 1.26.
· asas telah dinaik taraf daripada versi 2.18 kepada 2.22.
· Penanda aras telah dinaik taraf daripada versi 1.15 kepada 1.18.
· bignum telah dinaik taraf daripada versi 0.33 kepada 0.37.
· Carp telah dinaik taraf daripada versi 1.29 kepada 1.3301.
· CGI telah dinaik taraf daripada versi 3.63 kepada 3.65. NOTA: CGI ditamatkan dan mungkin
dialih keluar daripada versi masa hadapan Perl.
· nama aksara telah dinaik taraf daripada versi 1.36 kepada 1.40.
· Kelas::Struct telah dinaik taraf daripada versi 0.64 kepada 0.65.
· Compress::Raw::Bzip2 telah dinaik taraf daripada versi 2.060 kepada 2.064.
· Compress::Raw::Zlib telah dinaik taraf daripada versi 2.060 kepada 2.065.
· Config::Perl::V telah dinaik taraf daripada versi 0.17 kepada 0.20.
· pemalar telah dinaik taraf daripada versi 1.27 kepada 1.31.
· CPAN telah dinaik taraf daripada versi 2.00 kepada 2.05.
· CPAN::Meta telah dinaik taraf daripada versi 2.120921 kepada 2.140640.
· CPAN::Meta::Keperluan telah dinaik taraf daripada versi 2.122 kepada 2.125.
· CPAN::Meta::YAML telah dinaik taraf daripada versi 0.008 kepada 0.012.
· Data::Dumper telah dinaik taraf daripada versi 2.145 kepada 2.151.
· DB telah dinaik taraf daripada versi 1.04 kepada 1.07.
· DB_File telah dinaik taraf daripada versi 1.827 kepada 1.831.
· DBM_Filter telah dinaik taraf daripada versi 0.05 kepada 0.06.
· tidak digunakan telah dinaik taraf daripada versi 0.02 kepada 0.03.
· Devel::Peek telah dinaik taraf daripada versi 1.11 kepada 1.16.
· Devel::PPPort telah dinaik taraf daripada versi 3.20 kepada 3.21.
· diagnostik telah dinaik taraf daripada versi 1.31 kepada 1.34.
· Digest::MD5 telah dinaik taraf daripada versi 2.52 kepada 2.53.
· Digest::SHA telah dinaik taraf daripada versi 5.84 kepada 5.88.
· DynaLoader telah dinaik taraf daripada versi 1.18 kepada 1.25.
· Pengekodan telah dinaik taraf daripada versi 2.49 kepada 2.60.
· pengekodan telah dinaik taraf daripada versi 2.6_01 kepada 2.12.
· Bahasa Inggeris telah dinaik taraf daripada versi 1.06 kepada 1.09.
$OLD_PERL_VERSION telah ditambahkan sebagai alias $].
· Errno telah dinaik taraf daripada versi 1.18 kepada 1.20_03.
· Pengeksport telah dinaik taraf daripada versi 5.68 kepada 5.70.
· ExtUtils::CBuilder telah dinaik taraf daripada versi 0.280210 kepada 0.280216.
· ExtUtils::Command telah dinaik taraf daripada versi 1.17 kepada 1.18.
· ExtUtils::Benam telah dinaik taraf daripada versi 1.30 kepada 1.32.
· ExtUtils::Install telah dinaik taraf daripada versi 1.59 kepada 1.67.
· ExtUtils::MakeMaker telah dinaik taraf daripada versi 6.66 kepada 6.98.
· ExtUtils::Miniperl telah dinaik taraf daripada versi kepada 1.01.
· ExtUtils::ParseXS telah dinaik taraf daripada versi 3.18 kepada 3.24.
· ExtUtils::Typemaps telah dinaik taraf daripada versi 3.19 kepada 3.24.
· ExtUtils::XSSymSet telah dinaik taraf daripada versi 1.2 kepada 1.3.
· ciri telah dinaik taraf daripada versi 1.32 kepada 1.36.
· medan telah dinaik taraf daripada versi 2.16 kepada 2.17.
· Fail::Nama asas telah dinaik taraf daripada versi 2.84 kepada 2.85.
· Fail::Salinan telah dinaik taraf daripada versi 2.26 kepada 2.29.
· Fail::DosGlob telah dinaik taraf daripada versi 1.10 kepada 1.12.
· Fail::Fetch telah dinaik taraf daripada versi 0.38 kepada 0.48.
· Fail::Find telah dinaik taraf daripada versi 1.23 kepada 1.27.
· Fail::Glob telah dinaik taraf daripada versi 1.20 kepada 1.23.
· Fail::Spec telah dinaik taraf daripada versi 3.40 kepada 3.47.
· Fail::Temp telah dinaik taraf daripada versi 0.23 kepada 0.2304.
· FileCache telah dinaik taraf daripada versi 1.08 kepada 1.09.
· Penapis::Mudah telah dinaik taraf daripada versi 0.89 kepada 0.91.
· Penapis::Util::Panggilan telah dinaik taraf daripada versi 1.45 kepada 1.49.
· Getopt::Long telah dinaik taraf daripada versi 2.39 kepada 2.42.
· Getopt::Std telah dinaik taraf daripada versi 1.07 kepada 1.10.
· Hash::Util::FieldHash telah dinaik taraf daripada versi 1.10 kepada 1.15.
· HTTP::Tiny telah dinaik taraf daripada versi 0.025 kepada 0.043.
· I18N::Langinfo telah dinaik taraf daripada versi 0.10 kepada 0.11.
· I18N::LangTags telah dinaik taraf daripada versi 0.39 kepada 0.40.
· jika telah dinaik taraf daripada versi 0.0602 kepada 0.0603.
· inc::latest telah dinaik taraf daripada versi 0.4003 kepada 0.4205. NOTA: inc::terkini ialah
ditamatkan dan boleh dialih keluar daripada versi masa hadapan Perl.
· integer telah dinaik taraf daripada versi 1.00 kepada 1.01.
· IO telah dinaik taraf daripada versi 1.28 kepada 1.31.
· IO::Compress::Gzip dan rakan telah dinaik taraf daripada versi 2.060 kepada 2.064.
· IPC::Cmd telah dinaik taraf daripada versi 0.80 kepada 0.92.
· IPC::Open3 telah dinaik taraf daripada versi 1.13 kepada 1.16.
· IPC::SysV telah dinaik taraf daripada versi 2.03 kepada 2.04.
· JSON::PP telah dinaik taraf daripada versi 2.27202 kepada 2.27203.
· Senarai::Util telah dinaik taraf daripada versi 1.27 kepada 1.38.
· locale telah dinaik taraf daripada versi 1.02 kepada 1.03.
· Tempatan::Kod telah dinaik taraf daripada versi 3.25 kepada 3.30.
· Tempatan::Maketext telah dinaik taraf daripada versi 1.23 kepada 1.25.
· Math::BigInt telah dinaik taraf daripada versi 1.9991 kepada 1.9993.
· Math::BigInt::FastCalc telah dinaik taraf daripada versi 0.30 kepada 0.31.
· Math::BigRat telah dinaik taraf daripada versi 0.2604 kepada 0.2606.
· MIME::Base64 telah dinaik taraf daripada versi 3.13 kepada 3.14.
· Modul::Build telah dinaik taraf daripada versi 0.4003 kepada 0.4205. NOTA: Modul::Bina ialah
ditamatkan dan boleh dialih keluar daripada versi masa hadapan Perl.
· Modul::CoreList telah dinaik taraf daripada versi 2.89 kepada 3.10.
· Modul:: Muatan telah dinaik taraf daripada versi 0.24 kepada 0.32.
· Modul::Load::Conditional telah dinaik taraf daripada versi 0.54 kepada 0.62.
· Modul::Metadata telah dinaik taraf daripada versi 1.000011 kepada 1.000019.
· mro telah dinaik taraf daripada versi 1.11 kepada 1.16.
· Net::Ping telah dinaik taraf daripada versi 2.41 kepada 2.43.
· Opcode telah dinaik taraf daripada versi 1.25 kepada 1.27.
· Pakej::Pemalar telah dinaik taraf daripada versi 0.02 kepada 0.04. CATATAN:
Package::Constants ditamatkan dan boleh dialih keluar daripada versi Perl yang akan datang.
· Params::Check telah dinaik taraf daripada versi 0.36 kepada 0.38.
· ibu bapa telah dinaik taraf daripada versi 0.225 kepada 0.228.
· Parse::CPAN::Meta telah dinaik taraf daripada versi 1.4404 kepada 1.4414.
· Perl::OSType telah dinaik taraf daripada versi 1.003 kepada 1.007.
· perlfaq telah dinaik taraf daripada versi 5.0150042 kepada 5.0150044.
· PerlIO telah dinaik taraf daripada versi 1.07 kepada 1.09.
· PerlIO::encoding telah dinaik taraf daripada versi 0.16 kepada 0.18.
· PerlIO::scalar telah dinaik taraf daripada versi 0.16 kepada 0.18.
· PerlIO::via telah dinaik taraf daripada versi 0.12 kepada 0.14.
· Pod::Escapes telah dinaik taraf daripada versi 1.04 kepada 1.06.
· Pod::Fungsi telah dinaik taraf daripada versi 1.06 kepada 1.08.
· Pod::Html telah dinaik taraf daripada versi 1.18 kepada 1.21.
· Pod::Parser telah dinaik taraf daripada versi 1.60 kepada 1.62.
· Pod::Perldoc telah dinaik taraf daripada versi 3.19 kepada 3.23.
· Pod::Penggunaan telah dinaik taraf daripada versi 1.61 kepada 1.63.
· POSIX telah dinaik taraf daripada versi 1.32 kepada 1.38_03.
· semula telah dinaik taraf daripada versi 0.23 kepada 0.26.
· Safe telah dinaik taraf daripada versi 2.35 kepada 2.37.
· Skalar::Util telah dinaik taraf daripada versi 1.27 kepada 1.38.
· SDBM_File telah dinaik taraf daripada versi 1.09 kepada 1.11.
· Soket telah dinaik taraf daripada versi 2.009 kepada 2.013.
· Storable telah dinaik taraf daripada versi 2.41 kepada 2.49.
· ketat telah dinaik taraf daripada versi 1.07 kepada 1.08.
· subs telah dinaik taraf daripada versi 1.01 kepada 1.02.
· Sys:: Nama hos telah dinaik taraf daripada versi 1.17 kepada 1.18.
· Sys::Syslog telah dinaik taraf daripada versi 0.32 kepada 0.33.
· Term::Cap telah dinaik taraf daripada versi 1.13 kepada 1.15.
· Term::ReadLine telah dinaik taraf daripada versi 1.12 kepada 1.14.
· Ujian::Harness telah dinaik taraf daripada versi 3.26 kepada 3.30.
· Ujian::Mudah telah dinaik taraf daripada versi 0.98 kepada 1.001002.
· Teks::ParseWords telah dinaik taraf daripada versi 3.28 kepada 3.29.
· Teks::Tab telah dinaik taraf daripada versi 2012.0818 kepada 2013.0523.
· Text::Wrap telah dinaik taraf daripada versi 2012.0818 kepada 2013.0523.
· Benang telah dinaik taraf daripada versi 3.02 kepada 3.04.
· Thread::Queue telah dinaik taraf daripada versi 3.02 kepada 3.05.
· benang telah dinaik taraf daripada versi 1.86 kepada 1.93.
· benang::shared telah dinaik taraf daripada versi 1.43 kepada 1.46.
· Tie::Array telah dinaik taraf daripada versi 1.05 kepada 1.06.
· Tie::Fail telah dinaik taraf daripada versi 0.99 kepada 1.00.
· Tie::Hash telah dinaik taraf daripada versi 1.04 kepada 1.05.
· Tie::Scalar telah dinaik taraf daripada versi 1.02 kepada 1.03.
· Tie::StdHandle telah dinaik taraf daripada versi 4.3 kepada 4.4.
· Masa::HiRes telah dinaik taraf daripada versi 1.9725 kepada 1.9726.
· Masa::Piece telah dinaik taraf daripada versi 1.20_01 kepada 1.27.
· Unicode::Collate telah dinaik taraf daripada versi 0.97 kepada 1.04.
· Unicode::Normalize telah dinaik taraf daripada versi 1.16 kepada 1.17.
· Unicode::UCD telah dinaik taraf daripada versi 0.51 kepada 0.57.
· utf8 telah dinaik taraf daripada versi 1.10 kepada 1.13.
· versi telah dinaik taraf daripada versi 0.9902 kepada 0.9908.
· vmsish telah dinaik taraf daripada versi 1.03 kepada 1.04.
· amaran telah dinaik taraf daripada versi 1.18 kepada 1.23.
· Win32 telah dinaik taraf daripada versi 0.47 kepada 0.49.
· XS::Typemap telah dinaik taraf daripada versi 0.10 kepada 0.13.
· XSLoader telah dinaik taraf daripada versi 0.16 kepada 0.17.
dokumentasi
Baru dokumentasi
perlrepository
Dokumen ini telah dialih keluar (sebenarnya, dinamakan semula perlgit dan diberi baik pulih besar) dalam Perl
v5.14, menyebabkan tapak web dokumentasi Perl menunjukkan versi yang sudah lapuk dalam Perl
v5.12 sebagai versi terkini. Ia kini telah dipulihkan dalam bentuk rintisan, mengarahkan pembaca ke
maklumat semasa.
Perubahan kepada Sedia ada dokumentasi
perldata
· Bahagian baharu telah ditambah untuk mendokumenkan hirisan tatasusunan indeks/nilai dan kunci/nilai baharu
sintaks kepingan cincang.
perldebguts
· Subrutin penyahpepijat "DB::goto" dan "DB::lsub" kini didokumenkan. [perl #77680]
perlexperiment
· "\s" yang sepadan dengan "\cK" ditandakan sebagai percubaan.
· ithread telah diterima dalam v5.8.0 (tetapi tidak digalakkan pada v5.20.0).
· Beregu panjang tidak dianggap sebagai percubaan.
· Kod dalam ungkapan biasa, kata kerja penjejak ke belakang ungkapan biasa, dan nilai
subrutin tidak lagi disenaraikan sebagai percubaan. (Ini juga mempengaruhi perlre dan
perlsub.)
perlfunc
· "chop" dan "chomp" kini ambil perhatian bahawa mereka boleh menetapkan semula lelaran cincang.
· pengendalian hujah "exec" kini lebih jelas didokumenkan.
· "Eval EXPR" kini mempunyai kaveat tentang mengembangkan nombor titik terapung di beberapa tempat.
· "goto EXPR" kini didokumenkan untuk mengendalikan ungkapan yang menilai kepada kod
rujukan seolah-olah ia adalah "goto &$coderef". Tingkah laku ini sekurang-kurangnya sepuluh tahun.
· Sejak Perl v5.10, subrutin dalam @INC boleh mengembalikan rujukan
kepada skalar yang memegang kod sumber awal untuk dimasukkan ke dalam fail. Ini sekarang
didokumenkan.
· Dokumentasi "ref" telah dikemas kini untuk mengesyorkan penggunaan "blessed", "isa"
dan "reftype" apabila berurusan dengan rujukan kepada objek yang diberkati.
perlguts
· Banyak perubahan kecil telah dibuat untuk mencerminkan perubahan yang dibuat pada dalaman perl dalam
siaran ini.
· Bahagian baharu tentang Nilai Baca Sahaja dan Salin pada Tulis telah ditambah.
perlhack
· Bahagian Panduan Tampalan Pantas Super telah dikemas kini.
perlhacktips
· Dokumentasi telah dikemas kini untuk memasukkan beberapa lagi contoh penggunaan "gdb".
perllexwarn
· Dokumentasi perllexwarn yang digunakan untuk menerangkan hierarki kategori amaran
difahami oleh pragma amaran. Penerangan itu kini telah dipindahkan ke amaran
dokumentasi itu sendiri, meninggalkan perllexwarn sebagai rintisan yang menunjuk kepadanya. Perubahan ini
menyatukan semua dokumentasi untuk amaran leksikal di satu tempat.
perllocale
· Dokumentasi kini menyebut fc() dan "\F", dan termasuk banyak penjelasan dan
pembetulan secara umum.
perlop
· Reka bentuk bahasa Perl sentiasa memerlukan pengendali monomorfik. Ini sekarang
disebut secara eksplisit.
perlopentut
· Tutorial "terbuka" telah ditulis semula sepenuhnya oleh Tom Christiansen, dan kini memfokuskan
hanya meliputi perkara-perkara asas, dan bukannya menyediakan rujukan menyeluruh kepada semua
perkara yang boleh dibuka. Penulisan semula ini datang sebagai hasil perbincangan yang giat tentang
perl5-porters dimulakan dengan satu set penambahbaikan yang ditulis oleh Alexander Hartmaier kepada
perlopentut sedia ada. Dokumen "lebih daripada yang anda ingin ketahui tentang "terbuka".
mungkin mengikuti dalam versi perl seterusnya.
perlre
· Hakikat bahawa enjin regexp tidak berusaha untuk memanggil binaan (?{}) dan (??{}).
apa-apa bilangan kali yang ditentukan (walaupun ia pada dasarnya akan DWIM sekiranya berjaya
perlawanan) telah didokumenkan.
· Pengubah suai "/r" (untuk penggantian tidak merosakkan) kini didokumenkan. [perl #119151]
· Dokumentasi untuk "/x" dan "(?# comment)" telah dikembangkan dan dijelaskan.
perlreguts
· Dokumentasi telah dikemas kini berdasarkan perubahan terkini kepada regcomp.c.
perlsub
· Keperluan untuk mengisytiharkan fungsi rekursif dengan prototaip untuk mendapatkan prototaip
untuk diberi penghormatan dalam panggilan rekursif kini didokumenkan. [perl #2726]
· Senarai nama subrutin yang digunakan oleh pelaksanaan perl kini disertakan. [perl
#77680]
perltrap
· Kini terdapat bahagian JavaScript.
perlunicode
· Dokumentasi telah dikemas kini untuk mencerminkan perubahan "Bidi_Class" dalam Unicode 6.3.
perlvar
· Bahagian baharu yang menerangkan isu prestasi $`, $& dan $', termasuk
penyelesaian dan perubahan dalam versi Perl yang berbeza, telah ditambah.
· Tiga nama pembolehubah bahasa Inggeris yang telah lama didokumenkan tetapi sebenarnya tidak wujud
telah dialih keluar daripada dokumentasi. Ini ialah $OLD_PERL_VERSION, $OFMT dan
$ARRAY_BASE.
(Sebenarnya, "OLD_PERL_VERSION" tidak wujud, bermula dengan semakan ini, tetapi kekal
tidak didokumenkan sehingga perl 5.22.0.)
perlxs
· Beberapa masalah dalam contoh "MY_CXT" telah dibetulkan.
Diagnostik
Penambahan atau perubahan berikut telah dibuat pada output diagnostik, termasuk amaran
dan mesej ralat yang membawa maut. Untuk senarai lengkap mesej diagnostik, lihat perldiag.
Baru Diagnostik
Baru kesilapan
· padam hujah ialah hirisan tatasusunan indeks/nilai, gunakan hirisan tatasusunan
(F) Anda menggunakan sintaks hirisan tatasusunan indeks/nilai (%array[...]) sebagai hujah untuk "memadam".
Anda mungkin maksudkan @array[...] dengan simbol @ sebaliknya.
· padam hujah ialah kepingan cincang kunci/nilai, gunakan kepingan cincang
(F) Anda menggunakan sintaks kepingan cincang kunci/nilai (%hash{...}) sebagai hujah untuk "memadam".
Anda mungkin maksudkan @hash{...} dengan simbol @ sebaliknya.
· Pemalar senarai ajaib tidak disokong
(F) Anda menetapkan tatasusunan ajaib kepada elemen simpanan, dan kemudian cuba menggunakan
subrutin dari slot yang sama. Anda meminta Perl melakukan sesuatu yang tidak boleh dilakukannya,
butiran tertakluk kepada perubahan antara versi Perl.
· Menambahkan Tetapan $/ pada rujukan %s adalah dilarang
Baru Amaran
· %s pada rujukan adalah percubaan:
Ciri "auto-deref" adalah percubaan.
Bermula pada v5.14.0, anda boleh menggunakan tekan, pop, kekunci dan terbina dalam yang lain
berfungsi bukan sahaja pada jenis agregat, tetapi pada rujukan kepada mereka. Ciri itu tidak
digunakan mengikut spesifikasi asal yang dimaksudkan, dan kini mungkin menjadi berlebihan
penyahrujukan postfix. Ia sentiasa dikategorikan sebagai ciri percubaan, dan
dalam v5.20.0 membawa amaran seperti itu.
Amaran kini akan dikeluarkan pada masa penyusunan apabila operasi ini dikesan.
tidak jika $] >= 5.01908, amaran => "percubaan::autoderef";
Pertimbangkan, bagaimanapun, menggantikan penggunaan ciri ini, kerana ia mungkin mengubah tingkah laku
semula sebelum menjadi stabil.
· Urutan berbilang ruang dalam definisi alias nama aksara tidak digunakan lagi
Menjejaki ruang putih dalam definisi alias nama-nama tidak digunakan lagi
Kedua-dua amaran penamatan yang melibatkan "\N{...}" ini telah dilaksanakan secara salah. mereka
tidak memberi amaran secara lalai (kini mereka lakukan) dan tidak boleh menyebabkan maut melalui "use warnings
FATAL => 'tidak digunakan lagi'" (kini boleh).
· Prototaip atribut(%s) membuang atribut prototaip terdahulu dalam sub yang sama
(W misc) Sub telah diisytiharkan sebagai "sub foo : prototype(A) : prototype(B) {}", untuk
contoh. Oleh kerana setiap sub hanya boleh mempunyai satu prototaip, pengisytiharan awal adalah
dibuang sementara yang terakhir digunakan.
· \0 aksara dalam %s tidak sah untuk %s: %s\0%s
(W syscalls) Dibenamkan \0 aksara dalam nama laluan atau argumen panggilan sistem lain
mengeluarkan amaran pada 5.20. Bahagian selepas \0 dahulunya diabaikan oleh sistem
panggilan.
· Memadankan titik kod bukan Unikod 0x%X terhadap sifat Unicode; mungkin tidak mudah alih.
Ini menggantikan mesej "Titik kod 0x%X bukan Unikod, semua \p{} padanan gagal; semua
Perlawanan \P{} berjaya".
· Tiada ']' dalam prototaip untuk %s : %s
(W illegalproto) Pengumpulan telah dimulakan dengan "[" tetapi tidak pernah ditutup dengan "]".
· Kemungkinan isu keutamaan dengan pengendali aliran kawalan
(Sintaks W) Terdapat kemungkinan masalah dengan pencampuran pengendali aliran kawalan
(cth "kembali") dan pengendali keutamaan rendah seperti "atau". Pertimbangkan:
sub { return $a atau $b; }
Ini dihuraikan sebagai:
sub { (kembali $a) atau $b; }
Yang berkesan hanya:
sub { return $a; }
Sama ada gunakan kurungan atau varian keutamaan tinggi pengendali.
Perhatikan ini mungkin juga dicetuskan untuk binaan seperti:
sub { 1 jika mati; }
· Penyahrujukan Postfix adalah percubaan
(S eksperimen::postderef) Amaran ini dikeluarkan jika anda menggunakan eksperimen
sintaks dereference postfix. Hanya menekan amaran jika anda ingin menggunakan
ciri, tetapi ketahui bahawa dengan berbuat demikian anda mengambil risiko menggunakan percubaan
ciri yang mungkin berubah atau dialih keluar dalam versi Perl masa hadapan:
tiada amaran "percubaan::postderef";
gunakan ciri "postderef", "postderef_qq";
$ref->$*;
$aref->@*;
$aref->@[@indeks];
... dan lain-lain ...
· Prototaip '%s' ditindih oleh atribut 'prototaip(%s)' dalam %s
(W prototaip) Prototaip telah diisytiharkan dalam kedua-dua kurungan selepas sub nama dan
melalui atribut prototaip. Prototaip dalam kurungan tidak berguna, kerana ia akan
digantikan dengan prototaip daripada atribut sebelum ia pernah digunakan.
· Nilai skalar @%s[%s] lebih baik ditulis sebagai $%s[%s]
(W sintaks) Dalam konteks skalar, anda telah menggunakan indeks tatasusunan/kepingan nilai (ditunjukkan oleh %)
untuk memilih satu elemen tatasusunan. Secara amnya adalah lebih baik untuk meminta skalar
nilai (ditandakan oleh $). Perbezaannya ialah $foo[&bar] sentiasa berkelakuan seperti a
skalar, kedua-duanya dalam nilai yang dipulangkan dan apabila menilai hujahnya, manakala
%foo[&bar] menyediakan konteks senarai kepada subskripnya, yang boleh melakukan perkara pelik jika
anda hanya menjangkakan satu subskrip. Apabila dipanggil dalam konteks senarai, ia juga mengembalikan
indeks (apa &bar pulangkan) sebagai tambahan kepada nilai.
· Nilai skalar @%s{%s} lebih baik ditulis sebagai $%s{%s}
(W sintaks) Dalam konteks skalar, anda telah menggunakan kunci cincang/kepingan nilai (ditunjukkan oleh %) untuk
pilih satu elemen cincang. Secara amnya adalah lebih baik untuk meminta nilai skalar
(ditandakan oleh $). Perbezaannya ialah $foo{&bar} sentiasa berkelakuan seperti skalar,
kedua-duanya dalam nilai yang dipulangkan dan semasa menilai hujahnya, manakala @foo{&bar} dan
menyediakan konteks senarai kepada subskripnya, yang boleh melakukan perkara pelik jika anda
mengharapkan hanya satu subskrip. Apabila dipanggil dalam konteks senarai, ia juga mengembalikan kunci masuk
tambahan kepada nilai.
· Menetapkan $/ kepada rujukan kepada %s sebagai bentuk slurp ditamatkan, dianggap sebagai undef
· Keluar yang tidak dijangka %u
(S) keluar () dipanggil atau skrip sebaliknya selesai dengan anggun apabila
"PERL_EXIT_WARN" telah ditetapkan dalam "PL_exit_flags".
· Kegagalan keluar yang tidak dijangka %d
(S) Tidak tertangkap mati () telah dipanggil apabila "PERL_EXIT_WARN" ditetapkan dalam "PL_exit_flags".
· Penggunaan aksara kawalan literal dalam nama pembolehubah tidak digunakan lagi
(D ditamatkan) Menggunakan aksara kawalan literal dalam sumber untuk merujuk kepada ^FOO
pembolehubah, seperti $^X dan ${^GLOBAL_PHASE} kini ditamatkan. Ini hanya mempengaruhi kod
seperti $\cT, dengan \cT ialah kawalan (seperti "SOH") dalam kod sumber: ${"\cT"} dan $^T
tetap sah.
· Penggunaan pengubah kerakusan yang tidak berguna
Ini membetulkan [Perl #42957].
Perubahan kepada Sedia ada Diagnostik
· Amaran dan ralat daripada enjin regexp kini UTF-8 bersih.
· Mesej ralat "Keadaan suis tidak diketahui" mempunyai sedikit perubahan. Ralat ini
tercetus apabila terdapat keadaan yang tidak diketahui dalam bersyarat "(?(foo))". Kesalahan
mesej yang digunakan untuk membaca:
Keadaan suis tidak diketahui (?(%s dalam regex;
Tetapi apa yang %s boleh jadi kebanyakannya bergantung pada nasib. Untuk "(?(foobar))", anda mungkin pernah melihatnya
"fo" atau "f". Untuk aksara Unicode, anda biasanya akan mendapat rentetan yang rosak. The
mesej telah ditukar untuk dibaca:
Keadaan suis tidak diketahui (?(...)) dalam regex;
Selain itu, penanda '<-- DI SINI' dalam ralat kini akan menunjuk ke tempat yang betul
regex.
· Amaran "%s "\x%X" tidak dipetakan ke Unicode" kini disenaraikan dengan betul sebagai amaran yang teruk
amaran dan bukannya sebagai kesilapan yang membawa maut.
· Dalam keadaan yang jarang berlaku, seseorang boleh mendapat "Tidak boleh memaksa REF baca sahaja untuk rentetan"
bukannya "Pengubahsuaian nilai baca sahaja" lazim. Ralat ganti ini
mesej telah dialih keluar.
· "Penggunaan samar-samar * diselesaikan sebagai operator *": Ini dan amaran serupa tentang "%" dan
"&" pernah berlaku dalam beberapa keadaan di mana tiada pengendali jenis yang disebut,
jadi amaran itu salah sama sekali. Ini telah dibetulkan [perl #117535, #76910].
· Amaran tentang prototaip subrutin yang cacat kini lebih konsisten dalam cara
prototaip diberikan. Beberapa amaran ini akan memotong prototaip yang mengandungi
nulls. Dalam kes lain satu amaran akan menyekat yang lain. Amaran tentang haram
aksara dalam prototaip tidak lagi menyebut "selepas '_'" jika watak buruk datang sebelum ini
garis bawah.
· Peraturan lipatan Perl tidak terkini untuk 0x%X; sila gunakan utiliti perlbug untuk
laporan; dalam regex; ditandai dengan <-- DI SINI dalam m/%s/
Mesej ini kini hanya dalam kategori regexp, dan bukan dalam kategori yang ditamatkan.
Ia masih merupakan amaran lalai (iaitu, teruk) [perl #89648].
· %%s[%s] dalam konteks skalar lebih baik ditulis sebagai $%s[%s]
Amaran ini kini berlaku untuk mana-mana %array[$index] atau %hash{key} yang diketahui dalam skalar
konteks pada masa penyusunan. Sebelum ini, perkataan "Nilai skalar %%s[%s] lebih baik
ditulis sebagai $%s[%s]".
· Keadaan suis tidak dikenali dalam regex; ditandai dengan <-- DI SINI dalam m/%s/:
Penerangan untuk diagnostik ini telah diperluaskan untuk merangkumi semua kes di mana
amaran mungkin berlaku. Isu dengan kedudukan penunjuk anak panah juga telah berlaku
diselesaikan.
· Mesej ralat untuk "my($a?$b$c)" dan "my(do{})" kini menyebut "bersyarat
expression" dan "do block", masing-masing, bukannya membaca 'Tidak boleh mengisytiharkan batal
operasi dalam "saya"'.
· Apabila "use re "debug"" melaksanakan regex yang mengandungi rujukan belakang, penyahpepijatan
output kini menunjukkan rentetan yang sedang dipadankan.
· Mesej ralat yang kini membawa maut "Watak yang mengikuti "\c" mestilah ASCII" telah dikata semula
sebagai "Watak yang mengikuti "\c" mesti ASCII boleh dicetak" untuk menekankan bahawa dalam "\cX", X
mestilah a boleh cetak (bukan kawalan) watak ASCII.
utiliti Perubahan
a2p
· Kemungkinan ranap akibat ralat luar demi satu semasa cuba mengakses sebelum permulaan
penimbal telah ditetapkan. [perl #120244]
bisect.pl
Alat pembahagian git Porting/bisect.pl telah mempunyai banyak peningkatan.
Ia disediakan sebagai sebahagian daripada pengedaran sumber tetapi tidak dipasang kerana ia tidak
serba lengkap kerana ia bergantung pada dijalankan dari dalam git checkout. Perhatikan juga bahawa ia
tidak membuat percubaan untuk membetulkan ujian, membetulkan pepijat masa jalan atau membuat sesuatu yang berguna untuk dipasang -
tujuannya adalah untuk membuat perubahan minimum untuk mendapatkan sebarang semakan sejarah yang menarik untuk dibina
dan jalankan sedekat mungkin dengan "as-was", dan dengan itu menjadikan "git bisect" mudah digunakan.
· Boleh menjalankan kes ujian secara pilihan dengan tamat masa.
· Kini boleh dijalankan di tempat dalam pembayaran git bersih.
· Boleh menjalankan kes ujian di bawah "valgrind".
· Boleh menggunakan tampalan dan pembetulan yang dibekalkan pengguna pada pembayaran sumber sebelum membina.
· Kini mempunyai pembetulan untuk membolehkan membina beberapa lagi julat sejarah bleadperl, yang
boleh berguna untuk menentukan asal-usul pepijat atau perubahan tingkah laku.
find2perl
· find2perl kini mengendalikan "?" kad bebas dengan betul. [perl #113054]
perlbug
· perlbug kini mempunyai pilihan "-p" untuk melampirkan patch dengan laporan pepijat.
· perlbug telah diubah suai untuk membekalkan templat laporan dengan penghujung baris CRLF dihidupkan
Windows. [perl #121277 ]
· perlbug kini membuat sedikit andaian yang mungkin tentang pengekodan laporan.
Ini mungkin akan berubah pada masa hadapan untuk menganggap UTF-8 secara lalai tetapi membenarkan pengguna
menimpa.
konfigurasi and Penyusunan
· The Makefile.PL untuk SDBM_File kini menjana yang lebih baik Makefile, yang mengelakkan perlumbaan
keadaan semasa pembuatan selari, yang boleh menyebabkan binaan gagal. Ini adalah
masalah membuat selari terakhir yang diketahui (pada *nix platform), dan oleh itu kami percaya bahawa a
selari membuat kini harus sentiasa bebas ralat.
· installperl and tukang ansuranpengendalian pilihan telah difaktorkan semula untuk menggunakan Getopt::Long.
Kedua-duanya digunakan oleh Makefile "pasang" sasaran, dan tidak dipasang, jadi ini
perubahan hanya mungkin menjejaskan skrip pemasangan tersuai.
· Pilihan huruf tunggal kini juga mempunyai nama yang panjang.
· Pilihan yang tidak sah kini ditolak.
· Argumen baris perintah yang bukan pilihan kini ditolak.
· Setiap kini mempunyai pilihan "--help" untuk memaparkan mesej penggunaan.
Tingkah laku untuk semua doa yang didokumenkan yang sah tidak berubah.
· Jika boleh, binaan kini mengelakkan seruan rekursif membuat apabila membina tulen-
Sambungan Perl, tanpa mengalih keluar sebarang keselarian daripada binaan. Pada masa ini sekitar 80
sambungan boleh diproses terus oleh make_ext.pl alat, bermakna 80
seruan daripada membuat dan 160 seruan daripada miniperl tidak lagi dibuat.
· Sistem binaan kini berfungsi dengan betul apabila menyusun di bawah GCC atau Clang dengan masa pautan
pengoptimuman didayakan (pilihan "-flto"). [perl #113022]
· Nama asas perpustakaan yang berbeza dengan "d_libname_unique".
Apabila menyusun perl dengan pilihan ini, fail perpustakaan untuk modul XS dinamakan
sesuatu "unik" -- contohnya, Hash/Util/Util.so menjadi
Hash/Util/PL_Hash__Util.so. Tingkah laku ini serupa dengan apa yang berlaku pada masa ini
VMS, dan berfungsi sebagai asas untuk port Android.
· Pilihan "sysroot" untuk menunjukkan direktori akar logik di bawah gcc dan clang.
Apabila membina dengan set pilihan ini, Konfigurasi dan pengkompil mencari semua
pengepala dan perpustakaan di bawah sysroot baharu ini, bukannya /.
Ini adalah penjimat masa yang besar jika menyusun silang, tetapi juga boleh membantu pada binaan asli jika
fail rantai alat anda mempunyai lokasi bukan standard.
· Model kompilasi silang telah diubahsuai. Terdapat beberapa pilihan baharu, dan beberapa
perubahan tidak serasi ke belakang:
Kami kini membina binari untuk miniperl dan generate_uudmap untuk digunakan pada hos, sebaliknya
daripada menjalankan setiap panggilan miniperl pada sasaran; ini bermakna, pendek daripada 'membuat ujian',
kami tidak lagi memerlukan akses kepada sistem sasaran setelah Konfigurasi selesai. Anda boleh menyediakan
binari yang sudah dibina melalui pilihan "hostperl" dan "hostgenerate" untuk Konfigurasikan.
Selain itu, jika menyasarkan platform EBCDIC daripada hos ASCII, atau sebaliknya, anda akan
perlu menjalankan Configure dengan "-Uhostgenerate", untuk menunjukkan bahawa generate_uudmap sepatutnya
dijalankan pada sasaran.
Akhir sekali, terdapat juga cara untuk mempunyai Konfigurasi tamat lebih awal, sejurus selepas membina
binari hos, dengan menyusun silang tanpa menyatakan "targethost".
Perubahan yang tidak serasi termasuk tidak lagi menggunakan xconfig.h, xlib atau Cross.pm, jadi
fail konfigurasi tin dan Makefiles perlu dikemas kini.
· Berkaitan dengan perkara di atas, kini terdapat cara untuk menentukan lokasi sh (atau
setara) pada sistem sasaran: "targetsh".
Sebagai contoh, Android mempunyai sh dalam /system/bin/sh, jadi jika menyusun silang daripada lebih
sistem Unixy biasa dengan sh in / Bin / sh, "targetsh" akan berakhir sebagai /system/bin/sh, dan
"sh" sebagai /bin/sh.
· Secara lalai, gcc 4.9 melakukan beberapa pengoptimuman yang memecahkan perl. The -fwrapv pilihan
melumpuhkan pengoptimuman tersebut (dan mungkin yang lain), jadi untuk gcc 4.3 dan kemudian (sejak
mungkin terdapat masalah serupa yang mengintai pada versi lama juga, tetapi -fwrapv adalah
rosak sebelum 4.3, dan pengoptimuman mungkin tidak akan hilang), Konfigurasi kini menambah
-fwrapv melainkan pengguna meminta -fno-wrapv, yang melumpuhkan -fwrapv, Atau
-fsanitize=undefined, yang mengubah limpahan -fwrapv mengabaikan ralat masa jalan.
[perl #121505 ]
Ujian
· Sasaran buat "test.valgrind" kini membolehkan ujian dijalankan secara selari. Sasaran ini
membolehkan suite ujian Perl dijalankan di bawah Valgrind, yang mengesan jenis C tertentu
ralat pengaturcaraan, walaupun pada kos yang besar dalam masa berjalan. Pada perkakasan yang sesuai,
membenarkan perlaksanaan selari mengembalikan banyak kos tambahan itu. [perl #121431]
· Pelbagai ujian dalam t/porting/ tidak lagi dilangkau apabila perl .git direktori ialah
di luar pokok perl dan ditunjuk oleh $GIT_DIR. [perl #120505]
· Suite ujian tidak lagi gagal apabila cangkerang interaktif pengguna mengekalkan $PWD
pembolehubah persekitaran, tetapi / Bin / sh digunakan untuk menjalankan ujian tidak.
platform Khidmat Bantuan
Baru Platform
Android
Perl kini boleh dibina untuk Android, sama ada secara asli atau melalui kompilasi silang, untuk
ketiga-tiga seni bina yang tersedia pada masa ini (ARM, MIPS, dan x86), pada pelbagai jenis
versi.
Bitrig
Sokongan kompilasi telah ditambahkan untuk Bitrig, garpu OpenBSD.
FreeMiNT
Sokongan telah ditambah untuk FreeMiNT, OS sumber terbuka percuma untuk sistem Atari ST dan
penggantinya, berdasarkan MiNT asal yang diterima pakai secara rasmi oleh Atari.
Synology
Synology menghantar kotak NASnya dengan pengedaran Linux tanpa lemak (DSM) pada harga yang relatif murah
CPU (seperti Marvell Kirkwood mv6282 - ARMv5tel atau Freescale QorIQ P1022 ppc -
e500v2) tidak dimaksudkan untuk stesen kerja atau pembangunan. Kotak-kotak ini harus dibina sekarang. The
masalah asas ialah lokasi bukan standard untuk alatan.
Dihentikan Platform
"sfio"
Kod yang berkaitan dengan menyokong sistem I/O "sfio" telah dialih keluar.
Perl 5.004 menambah sokongan untuk menggunakan API asli "sfio", I/O Selamat/Pantas AT&T
perpustakaan. Kod ini masih dibina dengan v5.8.0, walaupun dengan banyak ujian regresi gagal,
tetapi telah rosak secara tidak sengaja sebelum keluaran v5.8.1, bermakna ia tidak berfungsi
pada mana-mana versi Perl yang dikeluarkan sejak itu. Dalam lebih sedekad kami tidak menerima pepijat
melaporkan tentang perkara ini, oleh itu adalah jelas bahawa tiada siapa yang menggunakan fungsi ini pada mana-mana
versi Perl yang masih disokong pada sebarang tahap.
AT&T 3b1
Konfigurasikan sokongan untuk 3b1, juga dikenali sebagai AT&T Unix PC (dan AT&T serupa
7300), telah dialih keluar.
DG/UX
DG/UX ialah Unix yang dijual oleh Data General. Keluaran terakhir adalah pada April 2001. Ia sahaja
berjalan pada perkakasan Data General sendiri.
EBCDIC
Sekiranya tiada sumber laporan asap tetap, kod bertujuan untuk menyokong asli
Platform EBCDIC akan dialih keluar dari perl sebelum 5.22.0.
Platform-Specific Nota
Cygwin
· recv() pada pemegang yang disambungkan akan mengisi alamat pengirim yang dikembalikan dengan
apa sahaja yang berlaku dalam penimbal yang berfungsi. recv() kini menggunakan penyelesaian
serupa dengan Win32 recv() pembalut dan mengembalikan rentetan kosong apabila recvfrom(2)
tidak mengubah suai panjang alamat yang dibekalkan. [perl #118843]
· Membetulkan ralat binaan dalam cygwin.c pada Cygwin 1.7.28.
Ujian kini mengendalikan ralat yang berlaku apabila "cygserver" tidak berjalan.
GNU / Hurd
Pustaka keserasian BSD "libbsd" tidak lagi diperlukan untuk binaan.
Linux
Fail petunjuk kini mencari "libgdbm_compat" hanya jika "libgdbm" itu sendiri juga dikehendaki.
Yang pertama tidak pernah berguna tanpa yang kedua, dan dalam beberapa keadaan, termasuknya
sebenarnya boleh menghalang pembinaan.
Mac OS
Sistem binaan kini menghormati tetapan "ld" yang dibekalkan oleh pengguna yang sedang berjalan Konfigurasi.
Tengah malamBSD
"objformat" telah dialih keluar daripada versi 0.4-RELEASE MidnightBSD dan telah
tidak digunakan pada versi terdahulu. Ini menyebabkan persekitaran binaan menjadi tersilap
dikonfigurasikan untuk "a.out" dan bukannya "elf". Ini kini telah diperbetulkan.
Platform campuran-endian
Kod yang menyokong operasi "pack" dan "unpack" pada platform endian bercampur telah
dikeluarkan. Kami percaya bahawa Perl telah lama tidak dapat membina endian campuran
seni bina (seperti PDP-11s), jadi kami tidak fikir perubahan ini akan menjejaskan mana-mana
platform yang mampu membina v5.18.0.
VMS
· Ciri "PERL_ENV_TABLES" untuk mengawal populasi %ENV pada permulaan perl
telah rosak dalam Perl 5.16.0 tetapi kini telah diperbaiki.
· Langkau pemeriksaan akses pada alat kawalan jauh masuk opendir(). [perl #121002]
· Semakan untuk aksara meta glob dalam laluan yang dikembalikan oleh pengendali "glob()".
telah digantikan dengan semakan untuk aksara kad bebas VMS. Ini menjimatkan yang ketara
bilangan panggilan "lstat()" yang tidak diperlukan sehingga beberapa operasi glob mudah menjadi
60-80% lebih pantas.
Win32
· "menamakan semula" dan "pautan" pada Win32 kini ditetapkan $! kepada ENOSPC dan EDQUOT apabila sesuai.
[perl #119857]
· Pilihan BUILD_STATIC dan ALL_STATIC makefile untuk memautkan beberapa atau (hampir) semua
sambungan secara statik (ke dalam perl520.dll, dan ke dalam perl-static.exe yang berasingan juga)
telah dipecahkan untuk binaan MinGW. Ini kini telah ditetapkan.
Pilihan ALL_STATIC juga telah ditambah baik untuk memasukkan Encode dan Win32
sambungan (untuk binaan VC++ dan MinGW).
· Sokongan untuk membina dengan Visual C++ 2013 telah ditambah. Pada masa ini terdapat dua
kemungkinan kegagalan ujian (lihat "Menguji Perl pada Windows" dalam perlwin32) yang akan
semoga dapat diselesaikan segera.
· Sokongan eksperimen untuk membina dengan Intel C++ Compiler telah ditambah. The
nmake makefile (win32/Makefile) dan dmake makefile (win32/makefile.mk) boleh
digunakan. "Ujian nmake" tidak akan lulus pada masa ini kerana cpan/CGI/t/url.t.
· Membunuh pokok proses dengan "membunuh" dalam perlfunc dan isyarat negatif, telah dipatahkan
bermula pada 5.18.0. Dalam pepijat ini, "bunuh" sentiasa mengembalikan 0 untuk isyarat negatif
walaupun untuk PID yang sah, dan tiada proses telah ditamatkan. Ini telah ditetapkan [perl
#121230].
· Masa yang diambil untuk membina perl pada Windows telah dikurangkan dengan agak ketara (masa
penjimatan dalam lingkungan 30-40% biasanya dilihat) dengan mengurangkan bilangan,
biasanya gagal, I/O memanggil setiap "require()" (for miniperl.exe sahaja). [perl
#121119 ]
· Kira-kira 15 minit tidur melahu telah dikeluarkan daripada menjalankan "make test" kerana a
pepijat di mana monitor tamat masa yang digunakan untuk ujian tidak boleh dibatalkan sebaik sahaja
ujian selesai, dan tempoh tamat masa penuh telah berlalu sebelum menjalankan ujian seterusnya
fail. [perl #121395 ]
· Pada perl yang dibina tanpa pseudo-fork (pseudo-fork binaan tidak terjejas oleh ini
pepijat), membunuh pokok proses dengan "kill()" dan isyarat negatif mengakibatkan
"kill()" menyongsangkan nilai yang dikembalikan. Contohnya, jika "kill()" membunuh 1 proses
pokok PID maka ia mengembalikan 0 dan bukannya 1, dan jika "kill()" diluluskan 2 tidak sah
PID kemudian mengembalikan 2 dan bukannya 0. Ini mungkin telah berlaku sejak
ciri pembunuh pokok proses telah dilaksanakan pada Win32. Ia kini telah diperbetulkan kepada
ikut tingkah laku yang didokumenkan. [perl #121230
]
· Apabila membina perl 64-bit, memori yang tidak dimulakan dibaca masuk miniperl.exe, digunakan
semasa proses binaan, boleh membawa kepada 4GB wperl.exe sedang dicipta. Ini mempunyai
kini telah ditetapkan. (Perhatikan bahawa perl.exe itu sendiri tidak terjejas, tetapi jelas
wperl.exe akan rosak sepenuhnya.) [perl #121471
]
· Perl kini boleh dibina dengan gcc versi 4.8.1 daripadahttp://www.mingw.org>. ini
sebelum ini rosak kerana takrifan yang salah tentang DllMain() dalam salah satu perl
fail sumber. Tadi gcc versi juga terjejas apabila menggunakan versi 4
pakej w32api. Versi daripada gcc Boleh didapati daripada
<http://mingw-w64.sourceforge.net/> tidak terjejas. [perl #121643
]
· Abah-abah ujian kini tidak mengalami kegagalan apabila perl dibina pada pemacu FAT dengan
OS Windows pada pemacu NTFS. [perl #21442
]
· Apabila mengklon tindanan konteks garpu () emulasi, Perl_cx_dup() akan terhempas
mengakses maklumat parameter untuk entri tindanan konteks yang menyertakan no
parameter, seperti "&foo;". [perl #121721
]
· Diperkenalkan oleh perl #113536
, kebocoran ingatan pada setiap
panggil ke "sistem" dan tanda belakang (" `` "), pada kebanyakan Perl Win32 bermula dari 5.18.0
telah ditetapkan. Kebocoran memori hanya berlaku jika anda mendayakan psuedo-fork dalam anda
binaan Win32 Perl, dan sedang menjalankan binaan itu pada Pelayan 2003 R2 atau OS yang lebih baharu.
Kebocoran tidak muncul pada WinXP SP3. [perl #121676
]
WinCE
· Pembinaan modul XS sebahagian besarnya telah dipulihkan. Beberapa masih tidak boleh (belum)
dibina tetapi kini boleh membina Perl pada WinCE dengan hanya beberapa
tampalan lanjut (ke Socket dan ExtUtils::MakeMaker), semoga dapat digabungkan
tidak lama lagi.
· Perl kini boleh dibina dalam satu pukulan tanpa campur tangan pengguna pada WinCE dengan berjalan
"nmake -f Makefile.ce semua".
Sokongan untuk membina dengan EVC (Embedded Visual C++) 4 telah dipulihkan. Perl boleh
juga dibina menggunakan Peranti Pintar untuk Visual C++ 2005 atau 2008.
Dalaman Perubahan
· Perwakilan dalaman telah berubah untuk pembolehubah padanan $1, $2 dsb., $`, $&,
$', ${^PREMATCH}, ${^MATCH} dan ${^POSTMATCH}. Ia menggunakan memori yang kurang sedikit, mengelak
perbandingan rentetan dan penukaran berangka semasa carian, dan menggunakan 23 baris yang lebih sedikit daripada
C. Perubahan ini tidak boleh menjejaskan mana-mana kod luaran.
· Tatasusunan kini menggunakan NULL secara dalaman untuk mewakili slot yang tidak digunakan, bukannya &PL_sv_undef.
&PL_sv_undef tidak lagi dianggap sebagai nilai istimewa, jadi av_store(av, 0, &PL_sv_undef)
akan menyebabkan elemen 0 tatasusunan itu memegang skalar tidak ditentukan baca sahaja. "$array[0] =
apa-apa" akan berkokok dan "\$array[0]" akan dibandingkan dengan "\undef".
· SV dikembalikan oleh HeSVKEY_force() kini betul mencerminkan UTF8ness daripada
kunci cincang asas apabila kunci itu tidak disimpan sebagai SV. [perl #79074]
· Fungsi dan makro tertentu yang jarang digunakan yang tersedia untuk kod XS kini tidak digunakan lagi.
Ini ialah: "utf8_to_uvuni_buf" (gunakan "utf8_to_uvchr_buf"),
"valid_utf8_to_uvuni" (gunakan "utf8_to_uvchr_buf" sebaliknya), "NATIVE_TO_NEED" (ini
tidak berfungsi dengan betul pula), dan "ASCII_TO_NEED" (ini tidak berfungsi dengan betul pula).
Bermula dalam keluaran ini, hampir tidak pernah kod aplikasi perlu dibezakan
antara set aksara platform dan Latin1, dengan 256 aksara terendah
Unicode adalah berasaskan. Kod baharu tidak boleh menggunakan "utf8n_to_uvuni" (gunakan "utf8_to_uvchr_buf"
sebaliknya), mahupun "uvuni_to_utf8" (gunakan "uvchr_to_utf8" sebaliknya),
· Pintasan Makefile menyasarkan untuk ujian dan pemprofilan yang jarang digunakan (atau tidak pernah).
sasaran telah dialih keluar atau digabungkan ke dalam satu-satunya sasaran Makefile lain yang menggunakan
mereka. Secara khusus, sasaran ini telah hilang, bersama-sama dengan dokumentasi yang dirujuk
mereka atau menerangkan cara menggunakannya:
semak.semakan ketiga.utf16 semak.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.third perl.third.config perl.valgrind.config purecovperl
pureperl quantperl test.deparse test.taintwarn test.third
test.test torture.utf16 test.utf8 test_notty.deparse
test_notty.third test_notty.valgrind test_prep.third
test_prep.valgrind torturetest ucheck ucheck.third ucheck.utf16
ucheck.valgrind utest utest.third utest.utf16 utest.valgrind
Anda masih boleh menjalankan arahan yang berkaitan dengan "tangan" - tiada asas
fungsi telah dialih keluar.
· Kini boleh menghalang Perl daripada memulakan pengendalian setempat. Untuk kebanyakan bahagian,
Perl tidak memberi perhatian kepada setempat. (Lihat perllocale.) Walau bagaimanapun, sehingga kini, pada
permulaan, ia sentiasa memulakan pengendalian setempat kepada lalai sistem, untuk berjaga-jaga
atur cara yang dilaksanakan akhirnya menggunakan tempat. (Ini adalah salah satu perkara pertama a
program kesedaran setempat harus dilakukan, lama sebelum Perl tahu jika ia benar-benar diperlukan
atau tidak.) Ini berfungsi dengan baik kecuali apabila Perl dibenamkan dalam aplikasi lain yang
mahukan tempat yang bukan lalai sistem. Sekarang, jika pembolehubah persekitaran
"PERL_SKIP_LOCALE_INIT" ditetapkan pada masa Perl dimulakan, langkah permulaan ini
dilangkau. Sebelum ini, pada platform Windows, satu-satunya penyelesaian untuk ini
kekurangan adalah menggunakan salinan kod Perl dalaman yang digodam. Aplikasi yang memerlukan
untuk menggunakan Perl lama boleh mengetahui sama ada Perl terbenam yang mereka gunakan memerlukan
penyelesaian dengan menguji bahawa simbol prapemproses C "HAS_SKIP_LOCALE_INIT" tidak
ditakrifkan. [RT #38193]
· "BmRARE" dan "BmPREVIOUS" telah dialih keluar. Mereka tidak digunakan di mana-mana dan tidak
sebahagian daripada API. Untuk modul XS, ia kini #ditakrifkan sebagai 0.
· "sv_force_normal", yang biasanya berkocak pada nilai baca sahaja, digunakan untuk membenarkan baca sahaja
nilai untuk diubah suai pada masa penyusunan. Ini telah ditukar kepada croak pada baca sahaja
nilai tanpa mengira. Perubahan ini mendedahkan beberapa pepijat teras.
· Mekanisme salin atas tulis baharu Perl (yang kini didayakan secara lalai), membenarkan mana-mana
Skalar "SvPOK" untuk ditingkatkan secara automatik kepada skalar salin atas tulis apabila disalin. A
kiraan rujukan pada penimbal rentetan disimpan dalam penimbal rentetan 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
CUR = 3
LEN = 16
COW_REFCNT = 1
SV = PV(0x260ce30) at 0x2620b20
REFCNT = 1
BENDERA = (POK,IsCOW,pPOK)
PV = 0x2619bc0 "abc"\0
CUR = 3
LEN = 16
COW_REFCNT = 1
Ambil perhatian bahawa kedua-dua skalar berkongsi penimbal PV yang sama dan mempunyai COW_REFCNT lebih besar daripada
sifar.
Ini bermakna kod XS yang ingin mengubah suai penimbal "SvPVX()" SV harus
panggil "SvPV_force()" atau yang serupa terlebih dahulu, untuk memastikan penimbal yang sah (dan tidak dikongsi), dan untuk
panggil "SvSETMAGIC()" selepas itu. Ini sebenarnya selalu berlaku (contohnya
kunci cincang telah pun salin-tulis); perubahan ini hanya menyebarkan tingkah laku LEMBU kepada a
pelbagai jenis SV yang lebih luas.
Satu perbezaan penting ialah sebelum 5.18.0, skalar kunci cincang yang dikongsi pernah ada
set bendera "SvREADONLY"; ini tidak lagi berlaku.
Tingkah laku baharu ini masih boleh dilumpuhkan dengan berjalan Konfigurasi bersama
-Accflags=-DPERL_NO_COW. Pilihan ini mungkin akan dialih keluar dalam Perl 5.22.
· "PL_sawampersand" kini pemalar. Suis pembolehubah yang disediakan ini (ke
dayakan/lumpuhkan salinan pra-perlawanan bergantung pada sama ada $& telah dilihat) telah
dialih keluar dan digantikan dengan copy-on-write, menghapuskan beberapa pepijat.
Tingkah laku sebelumnya masih boleh didayakan dengan berjalan Konfigurasi bersama
-Accflags=-DPERL_SAWAMPERSAND.
· Fungsi "my_swap", "my_htonl" dan "my_ntohl" telah dialih keluar. Ia tidak jelas
mengapa fungsi ini pernah ditandakan sebagai A, sebahagian daripada API. Kod XS tidak boleh memanggil mereka
secara langsung, kerana ia tidak boleh bergantung pada mereka yang disusun. Tidak mengejutkan, tiada kod pada CPAN
merujuk mereka.
· Tandatangan fungsi regex "Perl_re_intuit_start()" telah berubah; fungsinya
penunjuk "intuit" dalam struktur pemalam enjin regex juga telah berubah dengan sewajarnya. A
parameter baharu, "strbeg" telah ditambah; ini mempunyai makna yang sama dengan nama yang sama
parameter dalam "Perl_regexec_flags". Sebelum ini intuit akan cuba meneka permulaan
rentetan daripada SV yang diluluskan (jika ada), dan kadangkala akan salah (cth dengan an
SV terlebih beban).
· Tandatangan fungsi regex "Perl_regexec_flags()" telah berubah; fungsinya
penunjuk "exec" dalam struktur pemalam enjin regex juga telah berubah kepada sepadan. The
Parameter "minend" kini mempunyai taip "SSize_t" untuk menyokong sistem 64-bit dengan lebih baik.
· Kod XS boleh menggunakan pelbagai makro untuk menukar kes aksara atau titik kod (untuk
contoh "toLOWER_utf8()"). Hanya beberapa daripada ini telah didokumenkan sehingga kini; dan sekarang
ia harus digunakan sebagai keutamaan untuk memanggil fungsi asas. Lihat "Watak
tukar kes" dalam perlapi.
· Kod ditangani agak tidak konsisten dengan uid dan gids. Beberapa tempat menganggap bahawa mereka
boleh disimpan dengan selamat dalam UV, yang lain dalam IV, yang lain dalam int. Empat makro baharu ialah
diperkenalkan: SvUID(), sv_setuid(), SvGID(), dan sv_setgid()
· "sv_pos_b2u_flags" telah ditambahkan pada API. Ia serupa dengan "sv_pos_b2u", tetapi
menyokong rentetan panjang pada platform 64-bit.
· "PL_exit_flags" kini boleh digunakan oleh pembenam perl atau kod XS lain untuk mempunyai perl "amaran"
atau "menggugurkan" pada percubaan keluar. [perl #52000]
· Menyusun dengan "-Accflags=-PERL_BOOL_AS_CHAR" kini membolehkan pengkompil C99 dan C++ untuk
tiru aliasing "bool" kepada "char" yang perl lakukan untuk penyusun C89. [perl
#120314]
· Hujah "sv" dalam "sv_2pv_flags" dalam perlapi, "sv_2iv_flags" dalam perlapi,
"sv_2uv_flags" dalam perlapi dan "sv_2nv_flags" dalam perlapi dan pembungkusnya yang lebih lama
sv_2pv, sv_2iv, sv_2uv, sv_2nv, kini bukan NULL. Melepasi NULL sekarang akan ranap. Bila
penanda bukan NULL diperkenalkan secara beramai-ramai dalam 5.9.3 fungsi ditanda bukan-
NULL, tetapi sejak penciptaan API SV dalam 5.0 alpha 2, jika NULL diluluskan,
fungsi mengembalikan 0 atau nilai jenis palsu. Kod yang menyokong hujah "sv".
tarikh bukan NULL kepada 5.0 alpha 2 secara langsung, dan secara tidak langsung kepada Perl 1.0 (pra 5.0 api). The
kekurangan dokumentasi bahawa fungsi menerima NULL "sv" telah diperbetulkan dalam 5.11.0
dan antara 5.11.0 dan 5.19.5 fungsi telah ditandakan NULLOK. Sebagai pengoptimuman
Kod NULLOK kini telah dialih keluar, dan fungsi menjadi bukan NULL bertanda semula,
kerana makro jenis getter teras tidak pernah lulus NULL kepada fungsi ini dan akan ranap
sebelum melepasi NULL.
Satu-satunya cara "sv" NULL boleh dihantar ke fungsi sv_2*v* adalah jika kod XS secara langsung
memanggil sv_2*v*. Ini tidak mungkin kerana kod XS menggunakan makro Sv*V* untuk mendapatkan asas
nilai daripada SV. Satu kemungkinan situasi yang membawa kepada NULL "sv" dihantar ke
sv_2*v*, adalah jika kod XS mentakrifkan makro jenis getternya sendiri Sv*V*, yang menyemak
untuk NULL sebelum membatalkan rujukan dan menyemak bendera SV melalui API awam Sv*OK*
makro atau terus menggunakan API peribadi "SvFLAGS", dan jika "sv" adalah NULL, maka panggil
sv_2*v berfungsi dengan huruf NULL atau menghantar "sv" yang mengandungi nilai NULL.
· newATTRSUB kini adalah makro
API awam newATTRSUB sebelum ini adalah makro kepada fungsi peribadi
Perl_newATTRSUB. Fungsi Perl_newATTRSUB telah dialih keluar. newATTRSUB kini makro kepada
fungsi dalaman yang berbeza.
· Perubahan dalam amaran yang dibangkitkan oleh "utf8n_to_uvchr()"
Fungsi peringkat bawah ini menyahkod aksara pertama rentetan UTF-8 kepada kod
titik. Ia boleh diakses kepada kod peringkat "XS", tetapi tidak digalakkan menggunakannya
secara langsung. Terdapat fungsi peringkat lebih tinggi yang memanggil ini yang harus digunakan
sebaliknya, seperti "utf8_to_uvchr_buf" dalam perlapi. Untuk kesempurnaan walaupun, ini
mendokumenkan beberapa perubahan padanya. Kini, ujian untuk kecacatan dilakukan sebelum sebarang ujian
untuk isu-isu lain yang berpotensi. Salah satu isu tersebut melibatkan titik kod yang begitu besar sehingga
mereka tidak pernah muncul dalam mana-mana standard rasmi (standard semasa telah berskala
kembali titik kod tertinggi yang boleh diterima daripada versi terdahulu). Ia mungkin (walaupun
tidak dilakukan dalam CPAN) untuk memberi amaran dan/atau melarang mata kod ini, sambil menerima yang lebih kecil
mata kod yang masih melebihi maksimum Unicode undang-undang. Mesej amaran untuk
ini kini termasuk titik kod jika boleh diwakili pada mesin. Sebelum ini ia
sentiasa dipaparkan bait mentah, yang masih dilakukan untuk kod yang tidak boleh diwakili
mata.
· Perubahan enjin Regexp yang menjejaskan antara muka enjin regex boleh pasang
Banyak bendera yang pernah didedahkan melalui regexp.h dan digunakan untuk mengisi extflag
ahli struct regexp telah dialih keluar. Bidang ini secara teknikalnya adalah peribadi untuk
Enjin regexp Perl sendiri dan tidak sepatutnya didedahkan di sana pada mulanya.
Bendera yang terjejas ialah:
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 dinamakan semula kepada PREGf_ setara dan dipindahkan ke regcomp.h.
Tingkah laku yang dicapai sebelum ini dengan menetapkan satu atau lebih bendera RXf_ANCH_ (melalui
topeng RXf_ANCH) kini telah digantikan dengan bit bendera *tunggal* dalam extflags:
RXf_IS_ANCHORED
enjin regex boleh pasang yang sebelum ini digunakan untuk menetapkan bendera ini kini harus menetapkan ini
bendera SAHAJA.
· Teras Perl kini secara konsisten menggunakan "av_tindex()" ("indeks teratas tatasusunan") sebagai
lebih jelas dinamakan sinonim untuk "av_len()".
· Pembolehubah penterjemah yang tidak jelas "PL_timesbuf" dijangka akan dialih keluar pada awal
5.21.x siri pembangunan, supaya Perl 5.22.0 tidak akan memberikannya kepada pengarang XS.
Walaupun pembolehubah masih wujud dalam 5.20.0, kami berharap amaran awal ini
penamatan akan membantu sesiapa sahaja yang menggunakan pembolehubah itu.
Dipilih Bug Pembaikan
Biasa Ungkapan
· Memperbaiki sebilangan kecil pembinaan regexp yang sama ada gagal dipadankan atau ranap
perl apabila rentetan yang dipadankan telah diperuntukkan di atas baris 2GB pada 32-bit
sistem. [RT #118175]
· Pelbagai kebocoran memori yang melibatkan penghuraian ungkapan biasa "(?[...])".
konstruk telah ditetapkan.
· "(?[...])" kini membenarkan interpolasi pola tersusun yang terdiri daripada "(?[...])"
dengan kelas aksara dalam kurungan ("$pat = qr/(?[ [a] ])/; /(?[ $pat ])/").
Dahulu, kurungan akan mengelirukan penghurai ungkapan biasa.
· Mesej amaran "Kuantiti tidak dijangka pada ungkapan panjang sifar" boleh muncul
dua kali bermula dalam Perl v5.10 untuk ungkapan biasa yang juga mengandungi penggantian
(cth, "a|b") mencetuskan pengoptimuman trie.
· Perl v5.18 secara tidak sengaja memperkenalkan pepijat di mana interpolasi bercampur naik dan turun-
rentetan UTF-8 yang digredkan dalam regex boleh mengakibatkan UTF-8 cacat dalam corak:
khususnya jika aksara yang diturunkan taraf dalam julat "\x80..\xff" mengikuti UTF-8
rentetan, mis.
utf8::upgrade( $u saya = "\x{e5}");
utf8::turun taraf($d saya = "\x{e5}");
/$u$d/
[RT #118297]
· Dalam ungkapan biasa yang mengandungi berbilang blok kod, nilai $1, $2, dsb.,
yang ditetapkan oleh panggilan ungkapan biasa bersarang akan bocor dari satu blok ke blok seterusnya. Sekarang
pembolehubah ini sentiasa merujuk kepada ungkapan biasa luar pada permulaan an
blok terbenam [perl #117917].
· "/$qr/p" telah dipecahkan dalam Perl 5.18.0; bendera "/p" diabaikan. Ini telah ditetapkan.
[perl #118213]
· Bermula dalam Perl 5.18.0, binaan seperti "/[#](?{})/x" akan mempunyai "#" dengan salah
ditafsirkan sebagai ulasan. Blok kod akan dilangkau, tidak dihuraikan. Ini telah
diperbetulkan.
· Bermula dalam Perl 5.001, ungkapan biasa seperti "/[#$a]/x" atau "/[#]$a/x" akan mempunyai
"#"nya salah ditafsirkan sebagai ulasan, jadi pembolehubah tidak akan interpolasi.
Ini telah diperbetulkan. [perl #45667]
· Perl 5.18.0 secara tidak sengaja menjadikan ungkapan biasa yang dinyahrujuk ("${ qr// }") palsu sebagai
boolean. Ini telah ditetapkan.
· Penggunaan "\G" dalam ungkapan biasa, di mana ia bukan pada permulaan corak, adalah
kini kurang buggy (walaupun masih agak bermasalah).
· Di mana ungkapan biasa termasuk blok kod ("/(?{...})/"), dan di mana penggunaan
beban berlebihan berterusan mencetuskan penyusunan semula blok kod, yang kedua
kompilasi tidak melihat skop leksikal luarnya. Ini adalah regresi dalam Perl 5.18.0.
· Kedudukan rentetan yang ditetapkan oleh "pos" boleh beralih jika rentetan menukar perwakilan
secara dalaman kepada atau dari utf8. Ini boleh berlaku, contohnya, dengan rujukan kepada objek dengan
terlampau beban rentetan.
· Mengambil rujukan kepada nilai pulangan dua panggilan "pos" dengan hujah yang sama, dan
kemudian memberikan rujukan kepada satu dan "undef" kepada yang lain, boleh mengakibatkan penegasan
kegagalan atau kebocoran ingatan.
· Elemen @- dan @+ kini dikemas kini dengan betul apabila ia merujuk kepada tangkapan yang tidak wujud.
Sebelum ini, unsur yang dirujuk ("$ref = \$-[1]") boleh merujuk pada padanan yang salah
selepas perlawanan seterusnya.
· Kod yang menghuraikan backref regex (atau backref/oktal yang tidak jelas) seperti \123 melakukan
mudah atoi(), yang boleh membalut bulat kepada nilai negatif pada rentetan digit panjang dan
menyebabkan kerosakan segmentasi. Ini kini telah ditetapkan. [perl #119505]
· Menetapkan glob jenis lain kepada "*^R" tidak lagi menjadikan enjin ungkapan biasa
kemalangan.
· Ungkapan biasa "\N" terlepas, apabila digunakan tanpa pendakap kerinting (bermaksud
"[^\n]"), telah mengabaikan "*" berikut jika diikuti dengan ruang putih di bawah /x. Ia mempunyai
telah begini sejak "\N" bermaksud "[^\n]" diperkenalkan pada 5.12.0.
· "s///", "tr///" dan "y///" kini berfungsi apabila aksara lebar digunakan sebagai pembatas.
[perl #120463]
· Beberapa kes urutan tidak ditamatkan (?...) dalam ungkapan biasa (cth, "/(?
telah ditetapkan untuk menghasilkan mesej ralat yang betul dan bukannya "panik: bungkus memori".
Kes lain (cth, "/(?(/") masih belum diperbaiki.
· Apabila rujukan kepada rujukan kepada objek terlebih muatan dikembalikan daripada biasa
blok kod ungkapan "(??{...})", penyahrujukan tersirat yang salah boleh berlaku
jika rujukan dalaman telah dikembalikan oleh blok kod sebelum ini.
· Pembolehubah terikat dikembalikan daripada "(??{...})" melihat nilai dalaman pembolehubah padanan
(iaitu, $1 dsb. daripada mana-mana padanan di dalam blok) dalam kaedah FETCHnya. Ini adalah
tidak berlaku jika rujukan kepada objek terlebih beban adalah perkara terakhir yang diberikan kepada
pembolehubah terikat. Sebaliknya, pembolehubah padanan merujuk kepada corak luar semasa
FETCH panggilan.
· Betulkan kekotoran yang tidak dijangka melalui regexp menggunakan locale. Sebelum ini, dalam keadaan tertentu,
penggunaan kelas watak boleh menyebabkan pencemaran apabila tidak sepatutnya. Beberapa watak
kelas adalah bergantung kepada setempat, tetapi sebelum tampalan ini, kadangkala pencemaran telah berlaku
walaupun untuk kelas watak yang tidak bergantung pada tempat. [perl #120675]
· Dalam keadaan tertentu, Perl akan membuang ralat jika dalam penegasan melihat di belakang dalam a
regexp, dakwaan merujuk kepada subcorak bernama, mengadu melihat di belakang adalah
berubah apabila tidak. Ini telah ditetapkan. [perl #120600], [perl #120618]. The
pembaikan semasa boleh diperbaiki pada masa hadapan.
· $^R tidak tersedia di luar ungkapan biasa yang memulakannya. [perl
#121070]
· Satu set besar pembetulan dan pemfaktoran semula untuk re_intuit_start() telah digabungkan, sorotan
ialah:
· Memperbaiki panik semasa menyusun ungkapan biasa "/\x{100}[xy]\x{100}{2}/".
· Memperbaiki regresi prestasi apabila melakukan padanan corak global melawan a
rentetan UTF-8. [perl #120692]
· Memperbaiki satu lagi isu prestasi yang memadankan ungkapan biasa seperti
"/ab.{1,2}x/" terhadap rentetan UTF-8 yang panjang tidak semestinya mengira bait
mengimbangi untuk sebahagian besar rentetan. [perl #120692]
· Memperbaiki ralat penjajaran semasa menyusun ungkapan biasa apabila dibina dengan GCC pada HP-
UX 64-bit.
· Pada platform 64-bit "pos" kini boleh ditetapkan kepada nilai yang lebih tinggi daripada 2**31-1. [perl
#72766]
Perl 5 Debugger and -d
· Arahan "man" debugger telah ditetapkan. Ia telah rosak dalam keluaran v5.18.0. The
Perintah "man" dialiaskan kepada nama "doc" dan "perldoc" - semuanya kini berfungsi semula.
· @_ kini boleh dilihat dengan betul dalam penyahpepijat, membetulkan regresi yang diperkenalkan dalam
penyahpepijat v5.18.0. [RT #118169]
· Di bawah binaan salin atas tulis (lalai pada 5.20.0) "${'_<-e'}[0]" tidak lagi mendapat
hancur. Ini ialah baris pertama input yang disimpan untuk kegunaan penyahpepijat untuk satu baris
[perl #118627].
· Pada binaan tidak berulir, tetapkan "${"_
menyebabkan "__FILE__" dan beberapa mesej ralat menghasilkan rentetan yang rosak, dan tidak lagi
menghalang arahan "#line" dalam eval rentetan daripada menyediakan baris sumber kepada
penyahpepijat. Binaan berulir tidak terjejas.
· Bermula dengan Perl 5.12, nombor baris dimatikan dengan satu jika -d suis telah digunakan pada
#! barisan. Sekarang mereka betul.
· "*DB::DB = sub {} jika 0" tidak lagi menghentikan mod nyahpepijat Perl daripada mencari "DB::DB"
subs diisytiharkan selepas itu.
· Cincang "%{'_<...'}" kini menetapkan titik putus pada "@{'_<...'}" yang sepadan dan bukannya
mana-mana tatasusunan @DB::dbline dialiaskan kepada. [perl #119799]
· Panggil set-magic apabila menetapkan $DB::sub. [perl #121255]
· Perintah "n" penyahpepijat kini menghormati subrutin nilai dan melangkah ke atasnya [perl
#118839].
Leksikal Subrutin
· Pemalar leksikal ("sub a() saya { 42 }") tidak lagi ranap apabila sebaris.
· Prototaip parameter yang dilampirkan pada subrutin leksikal kini dihormati semasa menyusun
subpanggilan tanpa kurungan. Sebelum ini, prototaip diberi penghormatan hanya untuk
panggilan bersama kurungan. [RT #116735]
· Ralat sintaks dalam subrutin leksikal dalam kombinasi dengan panggilan ke subrutin yang sama
tidak lagi menyebabkan ranap sistem pada masa penyusunan.
· Amaran rekursi mendalam tidak lagi ranap subrutin leksikal. [RT #118521]
· Siasatan sub-masuk dtrace kini berfungsi dengan sub-logis leksikal, bukannya ranap [perl
#118305].
· Menyahtakrif subrutin leksikal yang tidak boleh digariskan ("sub foo() saya { 42 } undef &foo") akan
mengakibatkan ranap sistem jika amaran dihidupkan.
· Sub leksikal yang tidak ditentukan yang digunakan sebagai kaedah yang diwarisi tidak lagi ranap.
· Kehadiran sub leksikal bernama "CORE" tidak lagi menghentikan awalan CORE:: dari
bekerja.
Segalanya Yang lain
· Kod peruntukan OP kini mengembalikan memori yang dijajarkan dengan betul dalam semua kes untuk "struct
pmop". Sebelum ini ia boleh mengembalikan memori hanya sejajar dengan sempadan 4-bait, iaitu
tidak betul untuk binaan ithread dengan 64 bit IV pada beberapa platform 32 bit. Terutamanya,
ini menyebabkan binaan gagal sepenuhnya pada sparc GNU/Linux. [RT #118055]
· Menilai cincang besar dalam konteks skalar kini lebih pantas, kerana bilangan yang digunakan
rantaian dalam cincang kini dicache untuk cincang yang lebih besar. Cincang yang lebih kecil terus tidak
menyimpannya dan mengiranya apabila diperlukan, kerana ini menjimatkan satu IV. Itu akan menjadi 1 IV
overhed untuk setiap objek yang dibina daripada cincang. [RT #114576]
· Perl v5.16 secara tidak sengaja memperkenalkan pepijat yang membuat panggilan ke XSUB yang tidak kelihatan
pada masa penyusunan telah dianggap sebagai lnilai dan boleh ditugaskan kepada, walaupun apabila
subrutin bukan sub nilai. Ini telah ditetapkan. [RT #117947]
· Dalam Perl v5.18.0 dwivar yang mempunyai rentetan kosong untuk bahagian rentetan tetapi bukan sifar
nombor untuk bahagian nombor mula dianggap benar. Dalam versi terdahulu mereka
telah dianggap sebagai palsu, perwakilan rentetan diutamakan. Yang tua
tingkah laku telah dipulihkan. [RT #118159]
· Sejak Perl v5.12, sebaris pemalar yang mengatasi kata kunci terbina dalam yang sama
nama telah bertindak balas "menggunakan subs", menyebabkan sebutan berikutnya pemalar untuk digunakan
sebaliknya kata kunci terbina dalam. Ini telah ditetapkan.
· Amaran yang dihasilkan oleh "-l $handle" kini terpakai pada rujukan dan glob IO, bukan hanya untuk
rujukan glob. Amaran itu juga kini UTF8-bersih. [RT #117595]
· "delete local $ENV{nonexistent_env_var}" tidak lagi membocorkan memori.
· "isih" dan "memerlukan" diikuti dengan kata kunci yang diawali dengan "CORE::" kini menganggapnya sebagai
kata kunci, dan bukan sebagai subrutin atau nama modul. [RT #24482]
· Melalui teka-teki tertentu, adalah mungkin untuk menyebabkan pakej semasa dibebaskan.
Pengendali tertentu ("bless", "reset", "open", "eval") tidak dapat mengatasi dan akan ranap.
Mereka telah dibuat lebih berdaya tahan. [RT #117941]
· Mengalikan pengendalian fail melalui tugasan glob-to-glob tidak akan mengemas kini kaedah dalaman
cache dengan betul jika pakej dengan nama yang sama dengan failhandle wujud, mengakibatkan
kaedah failhandle memanggil pergi ke pakej sebaliknya. Ini telah ditetapkan.
· "./Configure -de -Dusevendorprefix" tidak menjadi lalai. [RT #64126]
· Amaran "Kenyataan tidak mungkin dicapai" telah disenaraikan dalam perldiag sebagai
"exec"-category warning, tetapi telah didayakan dan dilumpuhkan oleh kategori "sintaks". hidup
sebaliknya, kategori "eksekusi" mengawal kematiannya. Ia kini sepenuhnya
dikendalikan oleh kategori "exec".
· Amaran "Senarai penggantian lebih panjang daripada senarai carian" untuk "tr///" dan "y///" tidak
lebih lama berlaku dengan kehadiran bendera "/c". [RT #118047]
· Stringifikasi NV tidak dicache supaya lokasi leksikal mengawal
rentetan titik perpuluhan. [perl #108378] [perl #115800]
· Terdapat beberapa pembetulan yang berkaitan dengan pengendalian setempat oleh Perl. perl #38193 ialah
diterangkan di atas dalam "Perubahan Dalaman". Juga tetap ialah #118197, di mana radix
(titik perpuluhan) aksara mestilah aksara ASCII (yang tidak berfungsi untuk sesetengah orang
bahasa bukan Barat); dan #115808, di mana "POSIX::setlocale()" pada kegagalan dikembalikan
"undef" yang tidak memberi amaran tentang tidak ditakrifkan walaupun amaran tersebut
yang aktif.
· Menyusun operator "split" yang hujah ketiganya ialah pemalar bernama penilaian kepada 0
tidak lagi menyebabkan nilai pemalar berubah.
· Pemalar bernama yang digunakan sebagai hujah kedua untuk "indeks" tidak lagi dipaksa untuk a
rentetan jika ia adalah rujukan, ungkapan biasa, dualvar, dsb.
· Penilai pemalar bernama kepada nilai yang tidak ditentukan digunakan sebagai hujah kedua untuk
"indeks" tidak lagi menghasilkan amaran "tidak dimulakan" pada masa penyusunan. Ia akan tetap
menghasilkannya pada masa larian.
· Apabila skalar dikembalikan daripada subrutin dalam @INC, skalar yang dirujuk ialah
secara ajaib ditukar kepada IO thingy, mungkin mengakibatkan ralat "Salinan pelik" jika
skalar itu terus digunakan di tempat lain. Kini Perl menggunakan salinan dalaman
skalar sebaliknya.
· Penggunaan tertentu pengendali "isih" dioptimumkan untuk mengubah suai tatasusunan di tempatnya, seperti
"@a = sort @a". Semasa pengisihan, tatasusunan dibuat baca sahaja. Jika blok jenis
sepatutnya berlaku untuk mati, maka tatasusunan kekal baca sahaja walaupun di luar "isihan". ini
telah ditetapkan.
· $a dan $b di dalam blok isihan dialiaskan kepada argumen sebenar untuk "isih", jadi ia
boleh diubah suai melalui dua pembolehubah tersebut. Ini tidak selalu berkesan, contohnya, untuk
lnilai subs dan $#ary, dan mungkin banyak pengendali lain. Ia berfungsi sekarang.
· Argumen untuk "isih" kini semuanya dalam konteks senarai. Jika "isih" itu sendiri dipanggil
dalam konteks kosong atau skalar, maka beberapa, tetapi tidak semua, hujah-hujah itu dahulunya tidak sah
atau konteks skalar.
· Prototaip subrutin dengan aksara Unikod di atas U+00FF semakin rosak semasa
pengklonan penutupan. Ini akan berlaku dengan subrutin menutup pembolehubah leksikal
diisytiharkan di luar, dan dengan subs leksikal.
· "UNIVERSAL::can" kini memperlakukan hujah pertamanya dengan cara yang sama yang dilakukan oleh panggilan kaedah:
Rujukan glob jenis dan glob dengan slot IO bukan kosong dianggap sebagai pemegang dan
rentetan dianggap sebagai pemegang fail, bukannya pakej, jika pemegang dengan nama itu
wujud [perl #113932].
· Panggilan kaedah pada typeglobs (cth, "*ARGV->getline") digunakan untuk menyelaraskan typeglob dan
kemudian cari semula. Digabungkan dengan perubahan dalam Perl 5.18.0, ini membenarkan "*foo->bar"
untuk memanggil kaedah pada pakej "foo" (seperti "foo->bar"). Dalam sesetengah kes ia boleh menyebabkan
kaedah untuk dipanggil pada pemegang yang salah. Kini hujah typeglob dianggap sebagai a
pemegang (sama seperti "(\*foo)->bar"), atau, jika slot IOnya kosong, ralat dinaikkan.
· Menetapkan vstring kepada pembolehubah terikat atau kepada argumen subrutin yang dialiaskan kepada a
elemen cincang atau tatasusunan yang tidak wujud kini berfungsi, tanpa meratakan vstring menjadi a
rentetan biasa.
· "pos", "tie", "terikat" dan "tali" tidak berfungsi dengan betul pada hujah subrutin yang dialiaskan
kepada elemen cincang dan tatasusunan yang tidak wujud [perl #77814, #27010].
· Operator anak panah gemuk "=>" kini boleh memetik kata kunci terbina dalam walaupun ia berlaku pada
baris seterusnya, menjadikannya konsisten dengan cara ia memperlakukan kata-kata kosong yang lain.
· Menghidupkan stub subrutin secara automatik melalui "\&$glob" mula menyebabkan ranap dalam Perl 5.18.0
jika $glob hanyalah salinan glob sebenar, iaitu skalar yang mempunyai glob
ditugaskan kepadanya. Ini telah ditetapkan. [perl #119051]
· Perl pernah membocorkan butiran pelaksanaan apabila merujuk kepada pemulangan
nilai pengendali tertentu. "for ($a+$b) { warn \$_; warn \$_ }" digunakan untuk memaparkan dua
alamat memori yang berbeza, kerana pengendali "\" sedang menyalin pembolehubah. Di bawah
binaan berulir, ia juga akan berlaku untuk pemalar ("khususnya(1) { ... }"). Ini telah berlaku
tetap. [perl #21979, #78194, #89188, #109746, #114838, #115388]
· Operator julat ".." telah mengembalikan skalar yang boleh diubah suai yang sama dengan setiap panggilan,
melainkan ia adalah satu-satunya perkara dalam pengepala gelung "foreach". Ini bermakna bahawa perubahan kepada
nilai dalam senarai yang dikembalikan akan kelihatan pada kali berikutnya pengendali itu
dilaksanakan. [perl #3105]
· Lipatan berterusan dan inlining subrutin tidak lagi menyebabkan operasi yang akan
biasanya mengembalikan skalar baharu yang boleh diubah suai untuk mengembalikan nilai baca sahaja.
· Penutupan bentuk "sub () { $some_variable }" tidak lagi sebaris, menyebabkan
perubahan kepada pembolehubah untuk diabaikan oleh pemanggil subrutin. [perl #79908]
· Nilai pulangan pengendali tertentu seperti "ref" kadangkala akan dikongsi antara
panggilan rekursif ke subrutin yang sama, menyebabkan panggilan dalaman mengubah suai nilai
dikembalikan oleh "ref" dalam panggilan luar. Ini telah ditetapkan.
· "__PACKAGE__" dan pemalar yang mengembalikan nama pakej atau kunci cincang kini secara konsisten
baca sahaja. Dalam pelbagai keluaran Perl sebelum ini, ia telah berubah dalam keadaan tertentu
keadaan.
· Mendayakan amaran "digunakan sekali" tidak lagi menyebabkan ranap pada pekeliling simpanan yang dibuat
pada masa penyusunan ("*Foo::Bar::Foo:: = *Foo::").
· Pemalar undef digunakan dalam kekunci cincang ("use constant u => undef; $h{+u}") tidak lagi
menghasilkan amaran "tidak dimulakan" pada masa penyusunan.
· Mengubah suai sasaran penggantian di dalam penggantian penggantian tidak lagi menyebabkan
kemalangan.
· Pernyataan pertama di dalam eval rentetan yang digunakan untuk menggunakan tetapan pragma yang salah
kadang-kadang semasa lipatan berterusan. "eval 'uc chr 0xe0'" secara rawak akan memilih antara
Unikod, bait dan semantik setempat. Ini telah ditetapkan.
· Pengendalian nilai pulangan penapis @INC (subrutin dikembalikan oleh subrutin dalam
@INC) telah diperbaiki dalam pelbagai cara. Pembolehubah terikat sebelum ini telah disalahgunakan, dan
menetapkan $_ kepada rujukan atau typeglob boleh mengakibatkan ranap sistem.
· Fungsi XS "SvPVbyte" telah ditetapkan untuk berfungsi dengan skalar terikat yang kembali
sesuatu selain daripada rentetan. Ia digunakan untuk mengembalikan utf8 dalam kes di mana "SvPV"
akan.
· Perl 5.18.0 secara tidak sengaja membuat ranap "--" dan "++" pada tetapan yang dinyahrujuk
ungkapan, dan menghentikan "++" daripada meratakan vstrings.
· "berkati" tidak lagi mati dengan "Tidak boleh memberkati nilai bukan rujukan" jika hujah pertamanya adalah
rujukan terikat.
· "set semula" dengan hujah tidak lagi melangkau skalar salin atas tulis, ungkapan biasa,
salinan typeglob, dan vstrings. Selain itu, apabila menemui nilai tersebut atau baca sahaja, ia
tidak lagi melangkau sebarang tatasusunan atau cincang dengan nama yang sama.
· "set semula" dengan hujah kini melangkau skalar yang dialiaskan kepada typeglobs ("untuk $z (*foo) {
set semula "z" }"). Sebelum ini ia akan merosakkan memori atau ranap.
· "ucfirst" dan "lcfirst" tidak menghormati bait pragma. Ini adalah regresi
daripada Perl 5.12. [perl #117355]
· Perubahan kepada "UNIVERSAL::DESTROY" kini mengemas kini cache DESTROY dalam semua kelas, bukannya
menyebabkan kelas yang telah mempunyai objek dimusnahkan untuk terus menggunakan sub lama.
Ini adalah regresi dalam Perl 5.18. [perl #114864]
· Semua kejadian positif palsu yang diketahui bagi amaran penamatan "Penggunaan '\' yang tidak berguna;
tidak melarikan diri metacharacter '%c'", ditambah dalam Perl 5.18.0, telah dialih keluar. [perl
#119101]
· Nilai $^E kini disimpan merentas pengendali isyarat pada Windows. [perl #85104]
· Pemegang fail leksikal (seperti dalam "buka $fh saya...") biasanya diberi nama berdasarkan
pakej semasa dan nama pembolehubah, cth "utama::$fh". Di bawah rekursi, yang
filehandle kehilangan bahagian "$fh" nama. Ini telah ditetapkan.
· Nilai tidak dimulakan yang dikembalikan oleh XSUB tidak lagi dikecualikan daripada tidak dimulakan
amaran. [perl #118693]
· "elsif ("")" tidak lagi tersilap menghasilkan amaran tentang konteks kosong. [perl
#118753]
· Melepasi "undef" kepada subrutin kini menyebabkan @_ mengandungi baca-sahaja tidak ditentukan yang sama
skalar bahawa "undef" kembali. Tambahan pula, "wujud $_[0]" kini akan kembali benar jika
"undef" ialah hujah pertama. [perl #7508, #109726]
· Menghantar elemen tatasusunan yang tidak wujud kepada subrutin biasanya tidak menghidupkannya secara automatik
melainkan subrutin itu mengubah hujahnya. Ini tidak berfungsi dengan betul
indeks negatif dan dengan unsur yang tidak wujud dalam tatasusunan. Unsur itu akan
dihidupkan segera. Penghidupan yang tertunda telah dilanjutkan untuk berfungsi
mereka. [perl #118691]
· Menetapkan rujukan atau glob kepada skalar yang dikembalikan oleh $#foo selepas tatasusunan @foo mempunyai
telah dibebaskan tidak lagi menyebabkan kegagalan penegasan pada binaan penyahpepijatan dan kebocoran memori
binaan biasa.
· Pada platform 64-bit, julat besar seperti 1..1000000000000 tidak lagi ranap, tetapi memakannya
semua ingatan anda sebaliknya. [perl #119161]
· "__DATA__" kini meletakkan pemegang "DATA" dalam pakej yang betul, walaupun semasa
pakej telah dinamakan semula melalui tugasan glob.
· Apabila "mati", "terakhir", "seterusnya", "buat semula", "goto" dan "keluar" melepaskan skop, adalah mungkin
untuk "DESTROY" secara rekursif untuk memanggil subrutin atau format yang sedang dibuat
keluar. Dalam kes itu, kadangkala pembolehubah leksikal di dalam sub akan bermula
mempunyai nilai dari panggilan luar, bukannya tidak ditentukan sebagaimana mestinya. ini
telah ditetapkan. [perl #119311]
· ${^MPEN} tidak lagi dianggap sebagai sinonim untuk ${^MATCH}.
· Perl kini berusaha lebih keras untuk mengembalikan nombor talian yang betul dalam "(pemanggil)[2]".
[perl #115768]
· Nombor talian di dalam pengendali seperti sebut harga berbilang talian kini dilaporkan dengan betul. [perl
#3643]
· Arahan "#line" di dalam kod yang dibenamkan dalam pengendali seperti petikan kini dihormati.
· Nombor baris kini betul di dalam dokumen di sini kedua apabila dua penanda di sini-doc
berlaku pada baris yang sama.
· Pengoptimuman dalam Perl 5.18 membuat andaian yang salah menyebabkan interaksi yang buruk dengan
modul Devel::CallParser CPAN. Jika modul telah dimuatkan maka pembolehubah leksikal
diisytiharkan dalam kenyataan berasingan berikutan senarai "saya(...)" mungkin gagal dibersihkan
keluar skop.
· Panggilan &xsub dan "goto &xsub" kini membenarkan subrutin yang dipanggil untuk menghidupkan elemen secara automatik
@_.
· &xsub dan "goto &xsub" tidak lagi ranap jika *_ telah tidak ditentukan dan tidak mempunyai entri ARRAY
(iaitu @_ tidak wujud).
· &xsub dan "goto &xsub" kini berfungsi dengan @_ terikat.
· Pengecam terlalu lama tidak lagi menyebabkan limpahan penimbal (dan ranap sistem). Mereka telah bermula
berbuat demikian dalam Perl 5.18.
· Amaran "Nilai skalar @hash{foo} lebih baik ditulis sebagai $hash{foo}" kini menghasilkan jauh
kurang positif palsu. Khususnya, @hash{+function_returning_a_list} dan @hash{ qw
"foo bar baz" } tidak lagi memberi amaran. Perkara yang sama berlaku untuk kepingan tatasusunan. [perl #28380,
#114024]
· "$! = EINVAL; waitpid(0, WNOHANG);" tidak lagi masuk ke gelung tak terhingga dalaman.
[perl #85228]
· Kemungkinan kerosakan pembahagian dalam penduaan pemegang fail telah diperbaiki.
· Subrutin dalam @INC boleh mengembalikan rujukan kepada skalar yang mengandungi permulaan
kandungan fail. Walau bagaimanapun, skalar itu dibebaskan lebih awal jika tidak dirujuk
di tempat lain, memberikan hasil rawak.
· "terakhir" tidak lagi mengembalikan nilai yang terkumpul pernyataan yang sama setakat ini, membetulkan
antara lain pepijat lama yang "tolak @a, lepas" akan cuba kembali
@a, menyalinnya seperti skalar dalam proses dan mengakibatkan ralat, "Pelik
salinan ARRAY yang terakhir." [perl #3112]
· Dalam sesetengah kes, pemegang fail penutup dibuka ke paip ke atau dari proses, yang telah
telah diduplikasi ke dalam pemegang standard, akan memanggil pembalut waitpid dalaman perl
dengan pid sifar. Dengan pembetulan untuk [perl #85228] pid sifar ini dihantar kepada
"waitpid", mungkin menyekat proses. Tunggu proses sifar ini tidak lagi
berlaku. [perl #119893]
· "pilih" digunakan untuk mengabaikan sihir pada hujah keempat (tamat masa), yang membawa kepada kesan
seperti "pilih" menyekat selama-lamanya dan bukannya masa tidur yang dijangkakan. Ini mempunyai
kini telah ditetapkan. [perl #120102]
· Nama kelas dalam "untuk kelas saya $foo" kini dihuraikan dengan betul. Dalam kes
aksara kedua nama kelas yang diikuti oleh digit (cth 'a1b') yang digunakan
berikan ralat "Missing $ on loop variable". [perl #120112]
· Perl 5.18.0 secara tidak sengaja tidak membenarkan "-bareword" di bawah "use strict" dan "use integer".
Ini telah ditetapkan. [perl #120288]
· "-a" pada permulaan baris (atau tanda sempang dengan mana-mana huruf tunggal yang bukan ujian fail
operator) tidak lagi menghasilkan 'Penggunaan "-a" yang salah tanpa tanda kurung adalah
amaran yang samar-samar. [perl #120288]
· Konteks nilai kini disebarkan dengan betul ke dalam blok kosong dan blok "jika" dan "lain".
dalam subrutin nilai. Sebelum ini, tatasusunan dan cincang kadangkala tidak betul
diratakan apabila dikembalikan dalam konteks senarai nilai, atau ralat "Salinan pelik" boleh berlaku.
[perl #119797]
· Konteks nilai kini disebarkan ke cabang "||" dan "&&" (dan mereka
setara abjad, "atau" dan "dan"). Ini bermaksud "foreach (pos $x || pos $y)
{...}" kini membenarkan "pos" diubah suai melalui $_.
· "stat" dan "readline" ingat pemegang terakhir yang digunakan; bekas untuk "_" khas
filehandle, yang terakhir untuk "${^LAST_FH}". "eval "*foo jika 0"" di mana *foo adalah yang terakhir
pemegang diserahkan kepada "stat" atau "garis baca" boleh menyebabkan pemegang itu dilupakan jika
pemegang belum dibuka lagi. Ini telah ditetapkan.
· Pelbagai kes "padam $::{a}", "padam $::{ENV}" dsb. menyebabkan ranap telah
tetap. [perl #54044]
· Menetapkan $! kepada EACCESS sebelum memanggil "memerlukan" boleh menjejaskan kelakuan "memerlukan".
Ini telah ditetapkan.
· Mesej amaran "Tidak boleh menggunakan \1 bermakna $1 dalam ungkapan" kini hanya berlaku pada
bahagian kanan (penggantian) sesuatu penggantian. Dahulu ia boleh berlaku dalam kod
dibenamkan di sebelah kiri, atau dalam mana-mana pengendali seperti petikan lain.
· Memberi ke dalam rujukan ("berkati $thisref, $thatref") telah lama tidak dibenarkan, tetapi
skalar ajaib untuk kedua seperti $/ dan yang terikat dikecualikan. Mereka tidak lagi
adalah. [perl #119809]
· Pemberkatan ke dalam rujukan secara tidak sengaja dibenarkan dalam 5.18 jika hujah kelas adalah
rujukan yang diberkati dengan cache kaedah basi (iaitu, kelas yang mempunyai subs yang ditentukan
sejak panggilan kaedah terakhir). Mereka tidak dibenarkan sekali lagi, seperti dalam 5.16.
· "$x->{key}" di mana $x diisytiharkan sebagai "My Class $x" tidak lagi ranap jika a
Class::FIELDS stub subrutin telah diisytiharkan.
· @$obj{'key'} dan "${$obj}{key}" digunakan untuk dikecualikan daripada semakan medan masa kompilasi
("Tiada medan kelas sedemikian"; lihat medan) tetapi tidak lagi.
· Unsur tatasusunan yang tidak wujud dengan indeks yang besar dihantar ke subrutin yang mengikat
tatasusunan dan kemudian cuba mengakses elemen tidak lagi mengakibatkan ranap sistem.
· Mengisytiharkan stub subrutin bernama NEGATIVE_INDICES tidak lagi membuat tatasusunan negatif
indeks ranap apabila pakej semasa ialah kelas tatasusunan terikat.
· Mengisytiharkan stub subrutin "memerlukan", "glob", atau "lakukan" dalam pakej CORE::GLOBAL::
tidak lagi membuat kompilasi panggilan kepada ranap fungsi yang sepadan.
· Aliasing CORE::GLOBAL:: fungsi kepada pemalar berhenti berfungsi dalam Perl 5.10 tetapi mempunyai
kini telah ditetapkan.
· Apabila "`...`" atau "qx/.../" memanggil penggantian "readpipe", interpolasi dwikuotik
kini berlaku, seperti yang berlaku apabila tiada penggantian. Sebelum ini, kehadiran seorang
override akan menjadikan pengendali seperti petikan ini bertindak seperti "q{}", menekan
interpolasi. [perl #115330]
· "<<<`...`" here-docs (dengan tanda belakang sebagai pembatas) kini memanggil "readpipe" menimpa.
[perl #119827]
· "&CORE::exit()" dan "&CORE::die()" kini menghormati petunjuk vmsish.
· Menyahtakrif glob yang mencetuskan kaedah DESTROY yang menyahtakrif glob yang sama ialah sekarang
selamat. Ia pernah menghasilkan amaran "Percubaan untuk membebaskan penunjuk glob yang tidak dirujuk" dan
memori bocor.
· Jika takrifan semula subrutin ("eval 'sub foo{}'" atau "newXS" untuk kod XS) mencetuskan
Kaedah DESTROY pada sub yang sedang ditakrifkan semula, dan kaedah itu menetapkan a
subrutin ke slot yang sama ("*foo = sub {}"), $_[0] tidak lagi dibiarkan menunjuk ke
skalar terbebas. Kini DESTROY ditangguhkan sehingga subrutin baharu telah dipasang.
· Pada Windows, perl tidak lagi memanggil CloseHandle() pada pemegang soket. Ini menjadikan
penyahpepijatan lebih mudah pada Windows dengan mengalih keluar pengecualian pemegang buruk tertentu yang tidak berkaitan. Ia
juga membetulkan keadaan perlumbaan yang menyebabkan fungsi soket gagal secara rawak dalam proses Perl
dengan berbilang rangkaian OS, dan kemungkinan kegagalan ujian masuk
dist/IO/t/cachepropagate-tcp.t. [perl #120091/118059]
· Format yang melibatkan rentetan dikodkan UTF-8, atau var pelik seperti ikatan, beban berlebihan atau
rujukan bertali (dan dalam perl baru-baru ini, vars NOK tulen) biasanya akan melakukan kesalahan
perkara dalam format apabila var dianggap sebagai rentetan dan dicincang berulang kali, seperti dalam
"^<<<<~~" dan seumpamanya. Ini kini telah diselesaikan. [perl
#33832/45325/113868/119847/119849/119851]
· "semctl(..., SETVAL, ...)" akan menetapkan semafor ke 32-bit teratas yang dibekalkan
integer bukannya bahagian bawah 32-bit pada sistem big-endian 64-bit. [perl #120635]
· "readdir()" kini hanya menetapkan $! atas kesilapan. $! tidak lagi ditetapkan kepada "EBADF" apabila itu
menamatkan "undef" dibaca daripada direktori melainkan panggilan sistem menetapkan $!. [perl
#118651]
· &TERAS::glob tidak lagi menyebabkan ranap sekejap disebabkan timbunan perl
rosak. [perl #119993]
· "buka" dengan lapisan yang memuatkan modul (cth, "<:encoding(utf8)") tidak lagi menjalankan
risiko terhempas kerana rasuah timbunan.
· Perl 5.18 memecahkan autoloading melalui panggilan kaedah "->SUPER::foo" dengan mencari AUTOLOAD
daripada pakej semasa dan bukannya superclass pakej semasa. Ini telah
tetap. [perl #120694]
· Pepijat lama yang menyebabkan "lakukan {} sehingga CONSTANT", di mana pemalar adalah benar
nilai, untuk membaca memori yang tidak diperuntukkan telah diselesaikan. Ini biasanya akan berlaku selepas
ralat sintaks. Dalam versi terdahulu Perl ia telah ranap sekejap-sekejap. [perl #72406]
· Betulkan HP-UX $! kegagalan. HP-UX strerror() mengembalikan rentetan kosong untuk ralat yang tidak diketahui
kod. Ini menyebabkan penegasan gagal di bawah binaan DEBUGGING. Sekarang sebaliknya, yang
mengembalikan rentetan untuk "$!" mengandungi teks yang menunjukkan kod adalah untuk ralat yang tidak diketahui.
· Elemen @INC yang diikat secara individu (seperti dalam "tali $INC[0]...") kini dikendalikan dengan betul.
Dahulu, sama ada sub yang dikembalikan oleh elemen terikat sedemikian akan dianggap sebagai sub
bergantung pada sama ada FETCH telah berlaku sebelum ini.
· "getc" pada pemegang bersaiz bait selepas pengendali "getc" yang sama telah digunakan pada utf8
pemegang yang digunakan untuk menganggap bait sebagai utf8, mengakibatkan tingkah laku tidak menentu (cth, cacat
amaran UTF-8).
· Awalan "{" pada permulaan baris argumen format sentiasa ditafsirkan sebagai
permulaan blok sebelum v5.18. Dalam Perl v5.18, ia mula dianggap sebagai
token yang samar-samar. Penghurai akan meneka sama ada ia sepatutnya tanpa nama
pembina hash atau blok berdasarkan kandungan. Sekarang perangai sebelum ini telah
telah dipulihkan. [perl #119973]
· Dalam Perl v5.18 "undef *_; goto &sub" dan "local *_; goto &sub" mula ranap. ini
telah ditetapkan. [perl #119949]
· Backticks (" `` " atau " qx// ") digabungkan dengan berbilang benang pada Win32 boleh mengakibatkan
output dihantar ke stdout pada satu utas yang ditangkap oleh backtick arahan luaran
dalam thread lain.
Ini boleh berlaku untuk proses pseudo-fork juga, kerana pseudo-fork Win32 adalah
dilaksanakan dari segi benang. [perl #77672]
· "buka $fh, ">+", undef" tidak lagi membocorkan memori apabila TMPDIR ditetapkan tetapi menunjuk ke
direktori fail sementara tidak boleh dibuat dalam. [perl #120951]
· " untuk ( $h{k} || '' ) " tidak lagi menghidupkan $h{k} secara automatik. [perl #120374]
· Pada mesin Windows, Perl kini meniru penggunaan POSIX persekitaran untuk setempat
permulaan. Sebelum ini, persekitaran tidak diendahkan. Lihat "PERSEKITARAN" dalam
perllocale.
· Membetulkan ranap apabila memusnahkan GLOB yang merujuk sendiri. [perl #121242]
Diketahui Masalah
· IO::Socket diketahui gagal dalam ujian pada AIX 5.3. Terdapat tampalan
dalam penjejak permintaan, #120835,
yang mungkin digunakan pada keluaran masa hadapan.
· Modul berikut diketahui mengalami kegagalan ujian dengan versi Perl ini.
Patch telah diserahkan, jadi diharapkan akan ada keluaran baharu tidak lama lagi:
· Data::Struktur::Util versi 0.15
· HTML::StripScripts versi 1.05
· Senarai::Kumpulkan versi 0.08.
Obituary
Diana Rosa, 27, dari Rio de Janeiro, pergi berehat panjang pada 10 Mei 2014, bersama-sama dengan
unta mewah dia terus tergantung pada skrin komputernya sepanjang masa. Dia seorang yang bersemangat
Penggodam Perl yang menyukai bahasa dan komunitinya serta tidak pernah terlepas acara Rio.pm.
Dia adalah seorang artis sejati, seorang yang gemar menulis kod, menyanyikan aria dan cantuman
dinding. Kami tidak akan melupakan anda.
Greg McCarroll meninggal dunia pada 28 Ogos 2013.
Greg terkenal kerana banyak sebab yang baik. Dia adalah salah seorang penganjur yang pertama
YAPC::Eropah, yang diakhiri dengan lelongan tidak berjadual di mana dia cuba untuk
mengumpul wang tambahan untuk mengelakkan persidangan itu mengalami kerugian. Greg yang tersilap
tiba untuk mesyuarat london.pm lewat seminggu; beberapa tahun kemudian dialah yang menjualnya
pilihan tarikh mesyuarat rasmi di lelongan YAPC::Europe, dan akhirnya sebagai gemilang
pemimpin london.pm dia dapat mewarisi kekeliruan tidak hormat yang dia telah cipta.
Sentiasa membantu, mesra dan optimistik ceria, anda akan dirindui, tetapi tidak pernah
dilupakan.
Penghargaan
Perl 5.20.0 mewakili kira-kira 12 bulan pembangunan sejak Perl 5.18.0 dan
mengandungi kira-kira 470,000 baris perubahan merentas 2,900 fail daripada 124 pengarang.
Tidak termasuk fail yang dijana secara automatik, alat dokumentasi dan keluaran, terdapat lebih kurang
280,000 baris perubahan kepada fail 1,800 .pm, .t, .c dan .h.
Perl terus berkembang sehingga dekad ketiganya berkat komuniti pengguna yang bertenaga
dan pemaju. Orang berikut diketahui telah menyumbangkan penambahbaikan itu
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, Aristotle 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, Father Chrysostomos, Florian Ragwitz,
Francois Perrad, Gavin Shelley, Gideon Israel Dsouza, Gisle Aas, Graham Knop, H.Merijn
Jenama, 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, Shlomi Fish,
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.
Senarai di atas hampir pasti tidak lengkap kerana ia dijana secara automatik daripada
sejarah kawalan versi. Khususnya, ia tidak termasuk nama-nama (sangat banyak
dihargai) penyumbang yang melaporkan isu kepada penjejak pepijat Perl.
Banyak perubahan yang disertakan dalam versi ini berasal dari modul CPAN yang disertakan
Teras Perl. Kami berterima kasih kepada seluruh komuniti CPAN kerana membantu Perl berkembang maju.
Untuk senarai lebih lengkap semua penyumbang sejarah Perl, sila lihat PENGARANG
fail dalam pengedaran sumber Perl.
laporan bugs
Jika anda mendapati perkara yang anda fikirkan sebagai pepijat, anda boleh menyemak artikel yang disiarkan baru-baru ini ke
kumpulan berita comp.lang.perl.misc dan pangkalan data pepijat perl di http://rt.perl.org/perlbug/ .
Mungkin juga terdapat maklumat di http://www.perl.org/ , Halaman Utama Perl.
Jika anda percaya anda mempunyai pepijat yang tidak dilaporkan, sila jalankan program perlbug yang disertakan bersama
pembebasan anda. Pastikan anda mengurangkan pepijat anda kepada kes ujian yang kecil tetapi mencukupi. pepijat anda
laporan, bersama-sama dengan output "perl -V", akan dihantar ke [e-mel dilindungi] menjadi
dianalisis oleh pasukan porting Perl.
Jika pepijat yang anda laporkan mempunyai implikasi keselamatan, yang menjadikannya tidak sesuai
hantar ke senarai mel yang diarkibkan secara terbuka, kemudian sila hantarkannya ke
[e-mel dilindungi]. Ini menunjukkan langganan tertutup mel tidak diarkibkan
senarai, yang merangkumi semua pelaksana teras, yang akan dapat membantu menilai kesannya
isu, cari penyelesaian dan bantu menyelaraskan keluaran tampalan kepada
mengurangkan atau menyelesaikan masalah merentas semua platform yang Perl disokong. Tolong sahaja
gunakan alamat ini untuk isu keselamatan dalam teras Perl, bukan untuk modul secara bebas
diedarkan pada CPAN.
Gunakan perl5200delta dalam talian menggunakan perkhidmatan onworks.net