Ini adalah perintah perl58delta yang dapat dijalankan di penyedia hosting gratis OnWorks menggunakan salah satu dari beberapa workstation online gratis kami seperti Ubuntu Online, Fedora Online, emulator online Windows atau emulator online MAC OS
PROGRAM:
NAMA
perl58delta - apa yang baru untuk Perl v5.8.0
DESKRIPSI
Dokumen ini menjelaskan perbedaan antara rilis 5.6.0 dan rilis 5.8.0.
Banyak perbaikan bug di 5.8.0 sudah terlihat di rilis pemeliharaan 5.6.1 sejak
kedua rilis tetap terkoordinasi dengan erat (sementara 5.8.0 masih disebut
5.7.sesuatu).
Perubahan yang diintegrasikan ke dalam rilis 5.6.1 ditandai "[561]". Banyak dari ini
perubahan telah dikembangkan lebih lanjut sejak 5.6.1 dirilis, yang ditandai "[561+]".
Anda dapat melihat daftar perubahan di rilis 5.6.1 (baik dari rilis 5.005_03 dan
rilis 5.6.0) dengan membaca perl561delta.
Highlight In 5.8.0
· Dukungan Unicode yang lebih baik
· Implementasi IO Baru
· Implementasi Utas Baru
· Akurasi Numerik Lebih Baik
· Sinyal Aman
· Banyak Modul Baru
· Pengujian Regresi Lebih Luas
Tidak kompatibel Perubahan
Biner Ketidakcocokan
Perl 5.8 is tidak biner cocok dengan terdahulu Pers of Perl.
Kamu memiliki untuk mengkompilasi ulang Tujuan XS modul.
(Modul Perl Murni harus terus bekerja.)
Alasan utama diskontinuitas adalah arsitektur IO baru yang disebut PerlIO. PerlIO
adalah konfigurasi default karena tanpanya banyak fitur baru Perl 5.8 tidak dapat
digunakan. Dengan kata lain: Anda hanya perlu mengkompilasi ulang modul Anda yang berisi kode XS, maaf
tentang itu.
Dalam rilis Perl di masa mendatang, modul XS non-PerlIO yang sadar mungkin menjadi sama sekali tidak didukung.
Ini seharusnya tidak terlalu sulit bagi penulis modul, namun: PerlIO telah dirancang sebagai
pengganti drop-in (pada tingkat kode sumber) untuk antarmuka stdio.
Bergantung pada platform Anda, ada juga alasan lain mengapa kami memutuskan untuk memecah biner
kompatibilitas, silakan baca terus.
64-bit platform dan malloc
Jika pointer Anda memiliki lebar 64 bit, malloc Perl tidak lagi digunakan karena memang demikian
tidak bekerja dengan baik dengan pointer 8-byte. Juga, biasanya sistem mallocs pada platform seperti itu
jauh lebih baik dioptimalkan untuk model memori besar seperti itu daripada malloc Perl. Beberapa memori-
aplikasi Perl lapar seperti PDL tidak bekerja dengan baik dengan malloc Perl. Akhirnya, lainnya
aplikasi dari Perl (seperti mod_perl) cenderung lebih memilih sistem malloc. Seperti
platform termasuk Alpha dan 64-bit HPPA, MIPS, PPC, dan Sparc.
AIX Dinaload
AIX dynaloading sekarang menggunakan di AIX rilis 4.3 dan yang lebih baru antarmuka dlopen asli dari
AIX alih-alih antarmuka lama yang ditiru. Perubahan ini mungkin akan mundur ke belakang
kompatibilitas dengan modul yang dikompilasi. Perubahan dibuat untuk membuat Perl lebih sesuai dengan
aplikasi lain seperti mod_perl yang menggunakan antarmuka asli AIX.
atribut untuk "Ku" variabel sekarang ditangani at waktu tayang
Sintaks "my EXPR : ATTRS" sekarang menerapkan atribut variabel saat run-time. (Subrutin dan
variabel "kami" masih menerapkan atribut pada waktu kompilasi.) Lihat atribut untuk
detil tambahan. Secara khusus, bagaimanapun, ini memungkinkan atribut variabel menjadi berguna
untuk antarmuka "tie", yang merupakan kekurangan dari rilis sebelumnya. Perhatikan bahwa yang baru
semantik tidak berfungsi dengan modul Attribute::Handlers (mulai versi 0.76).
Stopkontak Perpanjangan Dinamis in VMS
Ekstensi Socket sekarang dimuat secara dinamis alih-alih dibangun secara statis. Ini
mungkin atau mungkin tidak menjadi masalah dengan tumpukan VMS TCP/IP kuno: kami tidak tahu karena kami
tidak dapat menguji Perl dalam konfigurasi seperti itu.
format IEEE Mengambang Titik Default on BukaVMS alfa
Perl sekarang menggunakan format IEEE (T_FLOAT) sebagai format floating point internal default pada
OpenVMS Alpha, berpotensi merusak kompatibilitas biner dengan perpustakaan eksternal atau
data yang ada. G_FLOAT masih tersedia sebagai opsi konfigurasi. Default pada VAX
(D_FLOAT) tidak berubah.
New Unicode Semantik tidak lebih "menggunakan utf8", hampir)
Sebelumnya di Perl 5.6 untuk menggunakan Unicode orang akan mengatakan "gunakan utf8" dan kemudian operasi
(seperti penggabungan string) sadar akan Unicode dalam lingkup leksikal itu.
Ini ditemukan sebagai antarmuka yang tidak nyaman, dan di Perl 5.8 model Unicode memiliki
benar-benar berubah: sekarang "Unicodeness" terikat pada data itu sendiri, dan untuk sebagian besar
waktu "gunakan utf8" tidak diperlukan sama sekali. Satu-satunya penggunaan "use utf8" yang tersisa adalah ketika
Skrip Perl sendiri telah ditulis dalam pengkodean UTF-8 Unicode. (UTF-8 belum
dijadikan default karena ada banyak skrip Perl di luar sana yang menggunakan berbagai
set karakter delapan bit nasional, yang akan ilegal di UTF-8.)
Lihat perluniintro untuk penjelasan model saat ini, dan utf8 untuk penggunaan saat ini
pragma utf8.
New Unicode Properties
Unicode script sekarang didukung. Skrip mirip dengan (dan lebih unggul dari) Unicode
blok. Perbedaan antara skrip dan blok adalah bahwa skrip adalah mesin terbang yang digunakan oleh a
bahasa atau sekelompok bahasa, sedangkan blok lebih merupakan pengelompokan buatan
(kebanyakan) 256 karakter berdasarkan penomoran Unicode.
Secara umum, skrip lebih inklusif, tetapi tidak secara universal. Misalnya, sementara
skrip "Latin" mencakup semua karakter Latin dan berbagai diakritiknya yang dihiasi
versi, itu tidak termasuk berbagai tanda baca atau angka (karena mereka tidak semata-mata
"Latin").
Sejumlah properti lain kini didukung, termasuk "\p{L&}", "\p{Apa saja}"
"\p{Ditugaskan}", "\p{Tidak ditetapkan}", "\p{Kosong}" [561] dan "\p{SpacePerl}" [561] (bersama dengan
versi "\P{...}" mereka, tentu saja). Lihat perlunicode untuk detailnya, dan tambahan lainnya.
Awalan "In" atau "Is" untuk nama yang digunakan dengan "\p{...}" dan "\P{...}" sekarang hampir
selalu opsional. Satu-satunya pengecualian adalah bahwa awalan "Dalam" diperlukan untuk menandakan Unicode
blokir ketika nama blok bertentangan dengan nama skrip. Misalnya, "\p{Tibet}" mengacu pada
skrip, sementara "\p{InTibetan}" mengacu pada blok. Ketika tidak ada konflik nama, Anda
dapat menghilangkan "In" dari nama blok (mis. "\p{BraillePatterns}"), tetapi untuk amannya,
mungkin yang terbaik untuk selalu menggunakan "Dalam").
REF(...) Malah Of SKALA(...)
Referensi ke referensi sekarang dirangkai sebagai "REF(0x81485ec)" bukannya
"SKALA(0x81485ec)" agar lebih konsisten dengan nilai pengembalian referensi().
bungkus/bongkar D/F daur ulang
Huruf template pack/unpack yang tidak berdokumen D/F telah didaur ulang untuk penggunaan yang lebih baik: sekarang
mereka berdiri untuk double panjang (jika didukung oleh platform) dan NV (Perl internal floating
jenis titik). (Dulu adalah alias untuk d/f, tapi Anda tidak pernah tahu itu.)
gumpal() sekarang Pengembalian nama file in alfabetis urutan
Daftar nama file dari gumpal() (atau <...>) sekarang secara default diurutkan berdasarkan abjad menjadi
csh-compliant (yang terjadi sebelumnya di sebagian besar platform Unix). (bsd_glob() tidak
masih mengurutkan platform secara native, ASCII atau EBCDIC, kecuali GLOB_ALPHASORT ditentukan.) [561]
Penghentian
· Semantik berkat (REF, REF) tidak jelas dan sampai seseorang membuktikannya untuk membuat beberapa
akal, itu dilarang.
· Pustaka chat2 usang yang seharusnya tidak pernah dibiarkan keluar dari
laboratorium telah dinonaktifkan.
· Menggunakan chdir("") atau chdir(undef) sebagai ganti eksplisit chdir() diragukan. Sebuah kegagalan
(pikirkan chdir(beberapa_fungsi()) dapat menyebabkan hal yang tidak diinginkan chdir() ke direktori home,
oleh karena itu perilaku ini tidak digunakan lagi.
· Dibangun membuang() fungsi mungkin telah hidup lebih lama dari sebagian besar kegunaannya. Inti-
fungsionalitas dumping akan tetap tersedia di masa mendatang sebagai panggilan eksplisit ke
"CORE::dump()", tetapi di masa mendatang akan merilis perilaku panggilan "dump()" yang tidak memenuhi syarat
mungkin berubah.
· Contoh yang sangat berdebu di direktori eg/ telah dihapus. Saran untuk yang baru
contoh mengkilap diterima tetapi masalah utamanya adalah contoh perlu didokumentasikan,
diuji dan (paling penting) dipertahankan.
· Urutan escape (palsu) \8 dan \9 sekarang memberikan peringatan opsional ("Tidak dikenali
escape melewati"). Tidak perlu \-escape karakter "\w" apa pun.
· *glob{FILEHANDLE} tidak digunakan lagi, gunakan *glob{IO} sebagai gantinya.
· Paket;" sintaks ("paket" tanpa argumen) telah ditinggalkan. Nya
semantik tidak pernah sejelas itu dan implementasinya bahkan kurang begitu. Jika Anda telah menggunakan
fitur itu untuk melarang semua kecuali variabel yang sepenuhnya memenuhi syarat, "gunakan ketat;" sebagai gantinya.
· Fitur POSIX regex yang tidak diimplementasikan [[.cc.]] dan [[=c=]] masih dikenali tetapi
sekarang menyebabkan kesalahan fatal. Perilaku sebelumnya mengabaikan mereka secara default dan
peringatan jika diminta tidak dapat diterima karena, dengan cara tertentu, berjanji secara palsu bahwa
fitur dapat digunakan.
· Dalam rilis mendatang, modul XS non-PerlIO yang sadar mungkin menjadi sama sekali tidak didukung.
Karena PerlIO adalah pengganti drop-in untuk stdio di tingkat kode sumber, ini
seharusnya tidak begitu drastis perubahannya.
· Versi Perl sebelumnya dan beberapa bacaan dari beberapa bagian Camel III menyiratkan bahwa
": mentah" "disiplin" adalah kebalikan dari ":crlf". Mematikan "clrfness" adalah tidak
cukup lama untuk membuat aliran benar-benar biner. Jadi lapisan PerlIO ":raw" (atau
"disiplin", untuk menggunakan terminologi lama buku Unta) sekarang secara resmi didefinisikan sebagai
setara dengan binmode(FH) - yang pada gilirannya didefinisikan sebagai melakukan apa pun
diperlukan untuk melewatkan setiap byte apa adanya tanpa terjemahan apa pun. Khususnya binmode (FH)
- dan karenanya ":raw" - sekarang akan mematikan terjemahan CRLF dan UTF-8 dan menghapus
lapisan lain (misalnya:pengkodean()) yang akan memodifikasi aliran byte.
· Implementasi pseudo-hash yang terlihat oleh pengguna saat ini (penggunaan aneh yang pertama
elemen array) tidak digunakan lagi mulai dari Perl 5.8.0 dan akan dihapus di Perl
5.10.0, dan fitur tersebut akan diimplementasikan secara berbeda. Tidak hanya saat ini
antarmuka agak jelek, tetapi implementasi saat ini memperlambat array dan hash normal
menggunakan cukup terasa. Antarmuka pragma "bidang" akan tetap tersedia. Itu
terbatas hash antarmuka diharapkan menjadi antarmuka pengganti (lihat
Hash::Util). Jika program Anda yang ada bergantung pada implementasi yang mendasarinya,
pertimbangkan untuk menggunakan Kelas::PseudoHash dari CPAN.
· Sintaks "@a->[...]" dan "%h->{...}" sekarang tidak digunakan lagi.
· Setelah bertahun-tahun mencoba, suidperl dianggap terlalu rumit untuk dipertimbangkan
benar-benar aman. Fungsi suidperl kemungkinan akan dihapus dalam rilis mendatang.
· Model utas 5.005 (modul "Utas") tidak digunakan lagi dan diharapkan akan dihapus dalam
Perl 5.10. Kode multithreaded harus dimigrasikan ke model itthreads baru (lihat
utas, utas::dibagikan dan perlthrtut).
· Alias huruf besar yang sudah lama tidak digunakan lagi untuk operator perbandingan string (EQ, NE, LT,
LE, GE, GT) kini telah dihapus.
· Fitur tr///C dan tr///U telah dihapus dan tidak akan kembali; antarmuka
adalah sebuah kesalahan. Maaf tentang itu. Untuk fungsi serupa, lihat paket('U0', ...) dan
paket('C0', ...). [561]
· Perls sebelumnya memperlakukan "sub foo (@bar)" sebagai setara dengan "sub foo (@)". Prototipe
sekarang diperiksa lebih baik pada waktu kompilasi untuk sintaks yang tidak valid. Peringatan opsional adalah
dihasilkan ("Karakter ilegal dalam prototipe ...") tetapi ini dapat ditingkatkan menjadi fatal
kesalahan dalam rilis mendatang.
· Operasi "exec LIST" dan "system LIST" sekarang menghasilkan peringatan pada data yang tercemar dan
dalam beberapa rilis mendatang mereka akan menghasilkan kesalahan fatal.
· Perilaku yang ada saat melokalkan array terikat dan hash salah, dan akan menjadi
diubah di rilis mendatang, jadi jangan bergantung pada perilaku yang ada. Lihat "Melokalkan
Array Terikat dan Hash Rusak".
Core tambahan
Unicode Pemeriksaan
Unicode secara umum seharusnya sekarang jauh lebih bermanfaat daripada di Perl 5.6.0 (atau bahkan di 5.6.1).
Unicode dapat digunakan dalam kunci hash, Unicode dalam ekspresi reguler seharusnya berfungsi sekarang, Unicode
di tr/// seharusnya berfungsi sekarang, Unicode di I/O seharusnya berfungsi sekarang. Lihat perluniintro untuk
pengenalan dan perlunicode untuk detailnya.
· Database Karakter Unicode datang dengan Perl telah ditingkatkan ke Unicode 3.2.0.
Untuk informasi lebih lanjut, lihat http://www.unicode.org/ . [561+] (5.6.1 memiliki UCD 3.0.1.)
· Untuk pengembang yang tertarik untuk meningkatkan kemampuan Unicode Perl: hampir semua UCD
file disertakan dengan distribusi Perl di lib/unicore subdirektori. Itu
kelalaian yang paling menonjol, untuk pertimbangan ruang, adalah database Unihan.
· Properti \p{Blank} dan \p{SpacePerl} telah ditambahkan. "Kosong" seperti C
kosong(), yaitu, hanya berisi "spasi putih horizontal" (karakter spasinya adalah,
baris baru tidak), dan "SpacePerl" adalah padanan Unicode dari "\s" (\p{Space}
tidak, karena itu termasuk karakter tabulator vertikal, sedangkan "\s" tidak.)
Lihat "Properti Unicode Baru" sebelumnya dalam dokumen ini untuk informasi tambahan tentang
perubahan dengan properti Unicode.
Perlio is Sekarang Default
· IO sekarang secara default dilakukan melalui PerlIO daripada "stdio" sistem. PerlIO memungkinkan
"lapisan" untuk "didorong" ke pegangan file untuk mengubah perilaku pegangan. Lapisan
dapat ditentukan pada waktu buka melalui 3-arg bentuk terbuka:
buka($fh,'>:crlf :utf8', $path) || ...
atau pada pegangan yang sudah dibuka melalui "binmode" yang diperluas:
binmode($fh,':encoding(iso-8859-7)');
Lapisan bawaan adalah: unix (baca/tulis tingkat rendah), stdio (seperti pada Perls sebelumnya),
perlio (implementasi ulang stdio buffering secara portabel), crlf (melakukan CRLF
<=> Terjemahan "\n" seperti pada Win32, tetapi tersedia di platform apa pun). Lapisan mmap mungkin
tersedia jika platform mendukungnya (kebanyakan Unix).
Lapisan yang akan diterapkan secara default dapat ditentukan melalui pragma 'terbuka'.
Lihat "Peningkatan Instalasi dan Konfigurasi" untuk efek PerlIO pada Anda
nama arsitektur.
· Jika platform Anda mendukung garpu(), Anda dapat menggunakan bentuk daftar "terbuka" untuk pipa. Untuk
contoh:
buka KID_PS, "-|", "ps", "aux" atau die $!;
garpu ps(1) perintah (tanpa menelurkan cangkang, karena ada lebih dari tiga
argumen untuk Buka()), dan membaca output standarnya melalui filehandle "KID_PS". Melihat
perlipc.
· Pegangan file dapat ditandai sebagai menerima penyandian internal Unicode Perl (UTF-8 atau
UTF-EBCDIC tergantung pada platform) dengan lapisan semu ":utf8" :
open($fh,">:utf8",,"Uni.txt");
Catatan untuk pengguna EBCDIC: lapisan semu ":utf8" salah dinamai untuk Anda karena
bukan UTF-8 yang akan Anda dapatkan melainkan UTF-EBCDIC. Lihat perlunicode,
utf8, dan http://www.unicode.org/unicode/reports/tr16/ untuk informasi lebih lanjut. Di
rilis mendatang penamaan ini dapat berubah. Lihat perluniintro untuk informasi lebih lanjut tentang
UTF-8.
· Jika variabel lingkungan Anda (LC_ALL, LC_CTYPE, LANG) terlihat seperti Anda ingin menggunakan UTF-8
(salah satu variabel cocok dengan "/utf-?8/i"), pegangan STDIN, STDOUT, STDERR Anda dan
lapisan terbuka default (lihat terbuka) ditandai sebagai UTF-8. (Fitur ini, seperti yang baru lainnya
fitur yang menggabungkan Unicode dan I/O, hanya berfungsi jika Anda menggunakan PerlIO, tetapi itu
default.)
Perhatikan bahwa setelah ini Perl benar-benar menganggap bahwa semuanya adalah UTF-8: misalnya jika
beberapa pegangan input tidak, Perl mungkin akan segera mengeluh tentang data input
seperti ini "UTF-8 salah bentuk ..." karena data delapan-bit lama tidak sah UTF-8.
Catatan untuk pembuat kode: jika Anda ingin memungkinkan pengguna Anda menggunakan UTF-8 sebagai default
pengkodean tetapi dalam kode Anda masih memiliki aliran I/O delapan bit (seperti gambar atau zip
file), Anda perlu secara eksplisit Buka() or mode bin() dengan ":byte" (lihat "buka" di
perlfunc dan "binmode" di perlfunc), atau Anda bisa menggunakan "binmode(FH)" (bagus untuk
kompatibilitas mundur pra-5.8.0).
· Pegangan file dapat menerjemahkan pengkodean karakter dari/ke bentuk Unicode internal Perl di
baca/tulis melalui ":pengkodean()"lapisan.
· Pegangan file dapat dibuka ke file "dalam memori" yang disimpan dalam skalar Perl melalui:
buka($fh,'>', \$variabel) || ...
· File sementara anonim tersedia tanpa perlu 'menggunakan FileHandle' atau lainnya
modul melalui
buka($fh,"+>", undef) || ...
Itu adalah undef literal, bukan nilai yang tidak ditentukan.
benang merah
Utas penerjemah baru (singkatnya "ithreads") implementasi multithreading, oleh
Arthur Bergman, menggantikan implementasi lama "5.005 utas". Dalam model utas
berbagi data apa pun di antara utas harus eksplisit, berbeda dengan model di mana data
berbagi itu tersirat. Lihat utas dan utas::dibagikan, dan perlthrtut.
Sebagai bagian dari implementasi utas, Perl juga akan menggunakan apa pun yang diperlukan dan dapat dideteksi
antarmuka libc masuk kembali.
Terbatas Hash
Sebuah hash terbatas dibatasi untuk satu set kunci tertentu, tidak ada kunci di luar set dapat
ditambahkan. Juga kunci individu dapat dibatasi sehingga kunci tidak dapat dihapus dan
nilai tidak dapat diubah. Tidak ada sintaks baru yang terlibat: modul Hash::Util adalah
Antarmuka.
Aman sinyal
Perl dulunya rapuh karena sinyal yang tiba di saat yang tidak tepat bisa merusak
Keadaan internal Perl. Sekarang Perl menunda penanganan sinyal sampai aman (antara
opcode).
Perubahan ini mungkin memiliki efek samping yang mengejutkan karena sinyal tidak lagi mengganggu Perl
segera. Perl sekarang pertama-tama akan menyelesaikan apa pun yang dilakukannya, seperti menyelesaikan internal
operasi (seperti menyortir()) atau operasi eksternal (seperti operasi I/O), dan hanya kemudian
lihat setiap sinyal yang datang (dan sebelum memulai operasi berikutnya). Tidak ada lagi korupsi
keadaan internal karena operasi saat ini selalu selesai terlebih dahulu, tetapi sinyal mungkin
mengambil lebih banyak waktu untuk didengar. Perhatikan bahwa keluar dari operasi yang berpotensi memblokir
harus tetap bekerja, meskipun.
Memahami of Bilangan
Secara umum banyak perbaikan telah terjadi di area pemahaman Perl tentang angka,
bilangan bulat dan titik mengambang. Karena di banyak sistem penguraian angka standar
fungsi seperti "strtoul()" dan "atof()" tampaknya memiliki bug, Perl mencoba mengatasinya
kekurangan. Ini diharapkan menghasilkan angka yang lebih akurat.
Perl sekarang mencoba secara internal untuk menggunakan nilai integer dalam konversi numerik dan dasar
aritmatika (+ - * /) jika argumennya bilangan bulat, dan mencoba juga untuk mempertahankan hasilnya
disimpan secara internal sebagai bilangan bulat. Perubahan ini menyebabkan sering sedikit lebih cepat dan selalu kurang
aritmatika lossy. (Sebelumnya Perl selalu lebih suka angka floating point dalam matematika.)
Array sekarang selalu menambah ke kutipan ganda string [561]
Dalam string yang dikutip ganda, array sekarang diinterpolasi, apa pun yang terjadi. Tingkah laku sebelumnya
versi Perl 5 adalah bahwa array akan diinterpolasi menjadi string jika array telah
disebutkan sebelum string dikompilasi, dan jika tidak, Perl akan memunculkan kompilasi yang fatal
kesalahan waktu. Dalam versi 5.000 hingga 5.003, kesalahannya adalah
Literal @example sekarang membutuhkan garis miring terbalik
Dalam versi 5.004_01 hingga 5.6.0, kesalahannya adalah
Dalam string, @example sekarang harus ditulis sebagai \@example
Idenya di sini adalah untuk membuat orang terbiasa menulis "fred\@example.com" ketika mereka
menginginkan tanda "@" literal, seperti yang selalu mereka tulis "Kembalikan \$5 saya" ketika
mereka menginginkan tanda "$" secara harfiah.
Dimulai dengan 5.6.1, saat Perl sekarang melihat tanda "@" dalam string bertanda kutip ganda, itu selalu
mencoba untuk menginterpolasi array, terlepas dari apakah array telah digunakan atau tidak atau
sudah dideklarasikan. Kesalahan fatal telah diturunkan ke peringatan opsional:
Kemungkinan interpolasi yang tidak diinginkan dari @contoh dalam string
Ini memperingatkan Anda bahwa "fred@contoh.com" akan berubah menjadi "fred.com" jika tidak
garis miring terbalik "@". Melihat http://perl.plover.com/at-error.html untuk lebih jelasnya tentang
sejarah di sini.
bermacam-macam Perubahan
· AUTOLOAD sekarang lvaluable, artinya Anda dapat menambahkan atribut :lvalue ke AUTOLOAD
subrutin dan Anda dapat menetapkan nilai kembalian AUTOLOAD.
· $Config{byteorder} (dan BYTEORDER yang sesuai di config.h) sebelumnya salah
dalam platform jika sizeof(panjang) adalah 4, tetapi sizeof(IV) adalah 8. Urutan byte hanya
sizeof(panjang) byte panjang (1234 atau 4321), tapi sekarang benar sizeof(IV) byte panjangnya,
(12345678 atau 87654321). (Masalah ini tidak memengaruhi platform Windows.)
Juga, $Config{byteorder} sekarang dihitung secara dinamis--ini lebih kuat dengan "fat
binari" di mana gambar yang dapat dieksekusi berisi binari untuk lebih dari satu biner
platform, dan saat kompilasi silang.
· "perl -d:Module=arg,arg,arg" sekarang berfungsi (sebelumnya seseorang tidak dapat memasukkan beberapa
argumen.)
· "lakukan" diikuti oleh kata baru sekarang memastikan bahwa kata kunci ini bukan kata kunci (untuk menghindari
bug di mana "do q(foo.pl)" mencoba memanggil subrutin yang disebut "q"). Ini berarti bahwa untuk
contoh alih-alih "lakukan format()" Anda harus menulis "lakukan &format()".
· Dibangun membuang() sekarang memberikan peringatan opsional "dump() lebih baik ditulis sebagai
INTI::dump()", yang berarti bahwa secara default "dump(...)" diselesaikan sebagai bawaan membuang()
yang membuang inti dan membatalkan, bukan sebagai (mungkin) "sub dump" yang ditentukan pengguna. Untuk memanggil
yang terakhir, memenuhi syarat panggilan sebagai "&dump(...)". (Seluruh membuang() fitur untuk dipertimbangkan
usang, dan mungkin dihapus/diubah di rilis mendatang.)
· mengunyah() dan memotong() sekarang dapat ditimpa. Namun, perhatikan bahwa prototipe mereka (seperti yang diberikan
oleh "prototype("CORE::chomp")" tidak terdefinisi, karena tidak dapat diekspresikan dan
oleh karena itu seseorang tidak dapat benar-benar menulis pengganti untuk menimpa bawaan ini.
· Blok END sekarang dijalankan bahkan jika Anda keluar/mati di blok BEGIN. Secara internal,
eksekusi blok END sekarang dikendalikan oleh PL_exit_flags & PERL_EXIT_DESTRUCT_END.
Ini memungkinkan perilaku baru untuk penyemat Perl. Ini akan menjadi default di 5.10. Melihat
bingung.
· Format sekarang mendukung bidang desimal nol-empuk.
· Meskipun "Anda tidak boleh melakukan itu", dimungkinkan untuk menulis kode yang bergantung pada Perl's
urutan kunci hash (Data :: Dumper melakukan ini). Algoritma baru "One-at-a-Time" menghasilkan
urutan kunci hash yang berbeda. Rincian lebih lanjut ada di "Peningkatan Kinerja".
· lstat(FILEHANDLE) sekarang memberikan peringatan karena operasi tidak masuk akal. Di masa depan
rilis ini bisa menjadi kesalahan fatal.
· Kesalahan sintaks palsu yang dihasilkan dalam situasi tertentu, ketika gumpal() menyebabkan File::Glob
akan dimuat untuk pertama kalinya, telah diperbaiki. [561]
· Subrutin nilai sekarang dapat mengembalikan "undef" dalam konteks daftar. Namun, nilai
fitur subrutin masih tetap eksperimental. [561+]
· Peringatan yang hilang "Tidak dapat mendeklarasikan ... dereference in my" telah dipulihkan (Perl memilikinya
sebelumnya tetapi menjadi hilang di rilis selanjutnya.)
· Variabel ekspresi reguler khusus baru telah diperkenalkan: $^N, yang berisi
grup yang paling baru ditutup (submatch).
· "tidak ada Modul;" tidak menghasilkan kesalahan bahkan jika Modul tidak memiliki batalkan impor()
metode. Ini paralel dengan perilaku "penggunaan" vis-a-vis "impor". [561]
· Operator perbandingan numerik mengembalikan "undef" jika salah satu operan adalah NaN.
Sebelumnya perilaku itu tidak ditentukan.
· "kami" sekarang dapat memiliki atribut opsional eksperimental "unik" yang memengaruhi seberapa global
variabel dibagikan di antara banyak juru bahasa, lihat "kami" di perlfunc.
· Fungsi bawaan berikut sekarang dapat diganti: setiap(), kunci(), pop (), Dorong(),
menggeser(), sambatan(), tidak bergeser(). [561]
· "pack() / unpack()" sekarang dapat mengelompokkan huruf template dengan "()" dan kemudian menerapkan
pengubah pengulangan/penghitungan pada grup.
· "pack() / unpack()" sekarang dapat memproses tipe numerik internal Perl: IVs, UVs, NVs--
dan juga ganda panjang, jika didukung oleh platform. Huruf template adalah "j",
"J", "F", dan "D".
· "pack('U0a*', ...)" sekarang dapat digunakan untuk memaksa string ke UTF-8.
· __PACKAGE__ $obj saya sekarang berfungsi. [561]
· POSIX::tidur() sekarang mengembalikan jumlah belum tidur detik (seperti yang dikatakan standar POSIX),
sebagai lawan INTI::tidur() yang mengembalikan jumlah detik tidur.
· cetakf() dan lari cepat() sekarang mendukung pengaturan ulang parameter menggunakan "%\d+\$" dan
Sintaks "*\d+\$". Sebagai contoh
printf "%2\$s %1\$s\n", "foo", "bar";
akan mencetak "bar foo\n". Fitur ini membantu dalam menulis perangkat lunak internasional, dan
secara umum ketika urutan parameter dapat bervariasi.
· Prototipe (\&) sekarang berfungsi dengan baik. [561]
· prototype(\[$@%&]) sekarang tersedia untuk membuat referensi secara implisit (berguna untuk
contoh jika Anda ingin meniru mengikat() antarmuka).
· Opsi baris perintah baru, "-t" tersedia. Ini adalah adik dari "-T":
alih-alih mati karena pelanggaran noda, peringatan leksikal diberikan. Kredensial mikro is hanya berarti
as a sementara debugging bantuan sementara mengamankan itu kode of tua warisan aplikasi. Kredensial mikro
is tidak a pengganti untuk -T.
· Dalam berita taint lainnya, "exec LIST" dan "system LIST" kini telah dipertimbangkan juga
berisiko (pikirkan "exec @ARGV": ia dapat memulai program apa pun dengan argumen apa pun), dan sekarang
bentuk-bentuk tersebut menyebabkan peringatan di bawah peringatan leksikal. Anda harus hati-hati mencuci
argumen untuk menjamin validitasnya. Dalam rilis Perl mendatang, formulir akan
menjadi kesalahan fatal jadi pertimbangkan untuk memulai pencucian sekarang.
· Antarmuka hash terikat sekarang diperlukan untuk memiliki metode EXISTS dan DELETE (baik
dimiliki atau diwariskan).
· Jika tr/// hanya menghitung karakter, ia tidak berusaha mengubah targetnya.
· membuka() sekarang akan memanggil MEMBUKA() kait jika ada. Lihat perltie untuk detailnya. [561]
· "utime" di perlfunc sekarang mendukung "utime undef, undef, @files" untuk mengubah file
stempel waktu ke waktu saat ini.
· Aturan untuk mengizinkan garis bawah (underbars) dalam konstanta numerik telah dilonggarkan
dan disederhanakan: sekarang Anda dapat memiliki garis bawah secara sederhana antara digit.
· Daripada mengandalkan argv[0] C (yang mungkin tidak berisi nama path lengkap) di mana
kemungkinan $^X sekarang disetel dengan menanyakan sistem operasi. (misalnya dengan membaca /proc/self/exe
di Linux, /proc/curproc/file di FreeBSD)
· Variabel baru, "${^TAINT}", menunjukkan apakah mode taint diaktifkan.
· Sekarang Anda dapat mengganti garis baca() builtin, dan ini menimpa juga
operator kurung sudut.
· Opsi baris perintah -s dan -F sekarang dikenali pada baris Shebang (#!).
· Penggunaan pengubah pencocokan "/c" tanpa pengubah "/g" yang menyertainya menghasilkan yang baru
peringatan: "Penggunaan /c modifier tidak ada artinya tanpa /g".
Penggunaan "/c" dalam substitusi, bahkan dengan "/g", memunculkan "Penggunaan pengubah /c adalah
tidak berarti dalam s///".
Penggunaan "/g" dengan "split" memunculkan "Penggunaan /g modifier tidak ada artinya di split".
· Dukungan untuk subrutin khusus "CLONE" telah ditambahkan. Dengan utas, ketika baru
utas dibuat, semua data Perl dikloning, namun data non-Perl tidak dapat dikloning
secara otomatis. Di "CLONE" Anda dapat melakukan apa pun yang perlu Anda lakukan, seperti misalnya menangani
kloning data non-Perl, jika perlu. "CLONE" akan dieksekusi sekali untuk setiap
paket yang telah didefinisikan atau diwariskan. Itu akan disebut dalam konteks yang baru
utas, jadi semua modifikasi dilakukan di area baru.
Lihat perlmod
Modul dan Pragmatis
New Modul dan Pragmatis
· "Atribut::Penangan", awalnya oleh Damian Conway dan sekarang dikelola oleh Arthur
Bergman, memungkinkan kelas untuk mendefinisikan penangan atribut.
paket MyPack;
gunakan Atribut::Penangan;
sub Serigala :ATTR(SCALAR) { print "melolong!\n" }
# nanti, dalam beberapa paket menggunakan atau mewarisi dari MyPack...
MyPack $Fluffy saya : Serigala; # Handler atribut Serigala akan dipanggil
Baik variabel dan rutinitas dapat memiliki penangan atribut. Penangan bisa spesifik untuk
ketik (SCALAR, ARRAY, HASH, atau CODE), atau khusus untuk fase kompilasi yang tepat
(MULAI, PERIKSA, INIT, atau AKHIR). Lihat Atribut::Penangan.
· "B::Concise", oleh Stephen McCamant, adalah backend compiler baru untuk menjalankan Perl
pohon sintaks, mencetak info singkat tentang ops. Outputnya sangat dapat disesuaikan. Melihat
B::Ringkas. [561+]
· Pragma bignum, bigint, dan bigrat baru, oleh Tels, menerapkan bignum transparan
dukungan (menggunakan Math::BigInt, Math::BigFloat, dan Math::BigRat backend).
· "Kelas::ISA", oleh Sean Burke, adalah modul untuk melaporkan jalur pencarian untuk kelas
pohon ISA. Lihat Kelas::ISA.
· "Cwd" sekarang memiliki kepribadian ganda: jika memungkinkan, ekstensi XS digunakan, (ini akan
semoga lebih cepat, lebih aman, dan lebih kuat) tetapi jika tidak memungkinkan, yang akrab
Implementasi Perl digunakan.
· "Devel::PPPort", awalnya oleh Kenneth Albanowski dan sekarang dikelola oleh Paul Marquess,
telah ditambahkan. Ini terutama digunakan oleh "h2xs" untuk meningkatkan portabilitas modul XS
antara versi Perl yang berbeda. Lihat Kembangkan::PPPort.
· "Intisari", modul frontend untuk menghitung intisari (checksum), dari Gisle Aas, memiliki
telah ditambahkan. Lihat Intisari.
· "Intisari::MD5" untuk menghitung intisari MD5 (checksum) seperti yang didefinisikan dalam RFC 1321, dari
Gisle Aas, telah ditambahkan. Lihat Intisari::MD5.
gunakan Intisari::MD5 'md5_hex';
$digest = md5_hex("Unta Haus");
print $digest, "\n"; # 01d19d9d2045e005c3f1b80e8b164de1
CATATAN: modul kompatibilitas mundur "MD5" sengaja tidak disertakan karena
penggunaan lebih lanjut tidak disarankan.
Lihat juga PerlIO::via::QuotedPrint.
· "Encode", awalnya oleh Nick Ing-Simmons dan sekarang dikelola oleh Dan Kogai, menyediakan
mekanisme untuk menerjemahkan antara pengkodean karakter yang berbeda. Dukungan untuk Unicode,
ISO-8859-1, dan ASCII dikompilasi ke dalam modul. Beberapa pengkodean lainnya (seperti
sisa ISO-8859, CP*/Win*, Mac, KOI8-R, tiga varian EBCDIC, China,
Encoding Jepang, dan Korea) disertakan dan dapat dimuat saat runtime. (Untuk ruang
pertimbangan, pengkodean Cina terbesar telah dipisahkan menjadi CPAN mereka sendiri
modul, Encode::HanExtra, yang akan digunakan Encode jika tersedia). Lihat Enkode.
Encoding apa pun yang didukung oleh modul Encode juga tersedia untuk ":pengkodean()"lapisan
jika PerlIO digunakan.
· "Hash::Util" adalah antarmuka ke yang baru terbatas hash fitur. (Dilaksanakan oleh
Jeffrey Friedl, Nick Ing-Simmons, dan Michael Schwern.) Lihat Hash::Util.
· "I18N::Langinfo" dapat digunakan untuk menanyakan informasi lokal. Lihat I18N::Langinfo.
· "I18N::LangTags", oleh Sean Burke, memiliki fungsi untuk menangani bahasa gaya RFC3066
tag. Lihat I18N::LangTags.
· "ExtUtils::Constant", oleh Nicholas Clark, adalah alat baru untuk penulis ekstensi untuk
menghasilkan kode XS untuk mengimpor konstanta header C. Lihat ExtUtils::Constant.
· "Filter::Simple", oleh Damian Conway, adalah antarmuka yang mudah digunakan untuk Filter::Util::Call.
Lihat Filter::Sederhana.
# di MyFilter.pm:
paket Filter Saya;
gunakan Filter::Sub sederhana {
while (saya ($dari, $ke) = sambungan @_, 0, 2) {
s/$dari/$ke/g;
}
};
1;
# dalam kode pengguna:
gunakan Filter Saya qr/merah/ => 'hijau';
cetak "merah\n"; # kode ini difilter, akan mencetak "hijau\n"
print "bosan\n"; # kode ini difilter, akan mencetak "bogreen\n"
tidak ada Filter Saya;
cetak "merah\n"; # kode ini tidak difilter, akan mencetak "merah\n"
· "File::Temp", oleh Tim Jenness, memungkinkan seseorang untuk membuat file dan direktori sementara di
cara yang mudah, portabel, dan aman. Lihat File::Temp. [561+]
· "Filter::Util::Call", oleh Paul Marquess, memberi Anda kerangka kerja untuk menulis
sumber filter di Perl. Untuk sebagian besar penggunaan, Filter frontend::Sederhana adalah untuk menjadi
disukai. Lihat Filter::Util::Call.
· "jika", oleh Ilya Zakharevich, adalah pragma baru untuk penyertaan modul bersyarat.
· libnet, oleh Graham Barr, adalah kumpulan modul perl5 yang terkait dengan jaringan
pemrograman. Lihat Net::FTP, Net::NNTP, Net::Ping (bukan bagian dari libnet, tetapi terkait),
Bersih::POP3, Bersih::SMTP, dan Bersih::Waktu.
Instalasi Perl membuat libnet tidak terkonfigurasi; menggunakan libnetcfg untuk mengkonfigurasinya.
· "List::Util", oleh Graham Barr, adalah pilihan dari subrutin daftar utilitas umum, seperti
as jumlah(), min (), pertama(), dan shuffle (). Lihat Daftar::Util.
· "Lokal::Konstanta", "Lokal::Negara", "Lokal::Mata uang" "Lokal::Bahasa", dan
Locale::Script, oleh Neil Bowers, telah ditambahkan. Mereka menyediakan kode untuk berbagai
standar lokal, seperti "fr" untuk Prancis, "usd" untuk Dolar AS, dan "ja" untuk Jepang.
gunakan Lokal::Negara;
$negara = kode2negara('jp'); # $country mendapat 'Jepang'
$kode = country2code('Norwegia'); # $code mendapat 'tidak'
Lihat Lokal::Konstanta, Lokal::Negara, Lokal::Mata Uang, dan Lokal::Bahasa.
· "Locale::Maketext", oleh Sean Burke, adalah kerangka kerja lokalisasi. Lihat Lokal::Maketext,
dan Lokal::Maketext::TPJ13. Yang terakhir adalah artikel tentang pelokalan perangkat lunak,
awalnya diterbitkan di The Perl Journal #13, dan diterbitkan ulang di sini dengan baik
izin.
· "Matematika::BigRat" untuk bilangan rasional besar, untuk menemani Matematika::BigInt dan Matematika::BigFloat,
dari Telp. Lihat Matematika::Tikus Besar.
· "Memoize" dapat membuat fungsi Anda lebih cepat dengan menukar ruang untuk waktu, dari Mark-Jason
Dominus Lihat Memoisasi.
· "MIME::Base64", oleh Gisle Aas, memungkinkan Anda untuk mengkodekan data di base64, seperti yang didefinisikan dalam RFC
2045 - PANTOMIM (Serba guna Internet surat Ekstensi).
gunakan MIME::Base64;
$encoded = encode_base64('Aladdin:buka wijen');
$decode = decode_base64($encoded);
print $dikodekan, "\n"; # "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
Lihat MIME::Base64.
· "MIME::QuotedPrint", oleh Gisle Aas, memungkinkan Anda untuk mengkodekan data dalam kutipan-cetak
pengkodean, seperti yang didefinisikan dalam RFC 2045 - PANTOMIM (Serba guna Internet surat Ekstensi).
gunakan MIME::QuotedPrint;
$encoded = encode_qp("\xDE\xAD\xBE\xEF");
$decode = decode_qp($encoded);
print $dikodekan, "\n"; # "=DE=AD=BE=EF\n"
print $dekode, "\n"; # "\xDE\xAD\xBE\xEF\n"
Lihat juga PerlIO::via::QuotedPrint.
· "NEXT", oleh Damian Conway, adalah pseudo-class untuk metode pengiriman ulang. Lihat BERIKUTNYA.
· "terbuka" adalah pragma baru untuk menyetel lapisan I/O default untuk Buka().
· "PerlIO::scalar", oleh Nick Ing-Simmons, menyediakan implementasi IO untuk "di
memori" Skalar Perl seperti yang dibahas di atas. Ini juga berfungsi sebagai contoh yang dapat dimuat
lapisan PerlIO. Kemungkinan masa depan lainnya termasuk PerlIO::Array dan PerlIO::Code. Melihat
PerlIO::skalar.
· "PerlIO::via", oleh Nick Ing-Simmons, bertindak sebagai lapisan PerlIO dan membungkus lapisan PerlIO
fungsionalitas yang disediakan oleh kelas (biasanya diimplementasikan dalam kode Perl).
· "PerlIO::via::QuotedPrint", oleh Elizabeth Mattijsen, adalah contoh dari "PerlIO::via"
kelas:
gunakan PerlIO::via::QuotedPrint;
open($fh,">:via(QuotedPrint)",$path);
Ini akan secara otomatis mengubah semua keluaran menjadi $fh menjadi Quoted-Printable. Melihat
PerlIO::via dan PerlIO::via::QuotedPrint.
· "Pod::ParseLink", oleh Russ Allbery, telah ditambahkan, untuk mengurai tautan L<> di dalam pod sebagai
dijelaskan dalam perlpodspec baru.
· "Pod::Text::Overstrike", oleh Joe Smith, telah ditambahkan. Ini mengubah data POD menjadi
teks overstrike yang diformat. Lihat Pod::Teks::Overstrike. [561+]
· "Skalar::Util" adalah pilihan subrutin skalar utilitas umum, seperti
diberkati(), tipe ulang(), dan tercemar(). Lihat Skalar::Util.
· "sort" adalah pragma baru untuk mengendalikan perilaku menyortir().
· "Storable" memberikan kegigihan untuk struktur data Perl dengan memungkinkan penyimpanan dan
pengambilan data Perl ke dan dari file dalam format biner yang cepat dan ringkas. Karena
pada dasarnya Storable melakukan serialisasi struktur data Perl, dengan itu Anda juga dapat
mengkloning struktur data hierarkis yang dalam. Storable awalnya dibuat oleh Raphael
Manfredi, tetapi sekarang dikelola oleh Abhijit Menon-Sen. Dapat disimpan telah ditingkatkan
untuk memahami dua fitur hash baru, kunci Unicode dan hash terbatas. Melihat
Bisa disimpan.
· "Switch", oleh Damian Conway, telah ditambahkan. Hanya dengan mengatakan
gunakan Saklar;
Anda memiliki "switch" dan "case" yang tersedia di Perl.
gunakan Saklar;
beralih ($val) {
kasus 1 { cetak "nomor 1" }
case "a" { print "string a" }
case [1] { print "nomor dalam daftar" }
case (@array) { print "nomor dalam daftar" }
case /\w+/ { cetak "pola" }
case qr/\w+/ { cetak "pola" }
case (%hash) { print "entri dalam hash" }
case (\%hash) { print "entri dalam hash" }
case (\&sub) { print "arg ke subrutin" }
else { print "kasus sebelumnya tidak benar" }
}
Lihat Beralih.
· "Test::More", oleh Michael Schwern, adalah kerangka kerja lain untuk menulis skrip pengujian,
lebih luas daripada Test::Simple. Lihat Tes::Lainnya.
· "Test::Simple", oleh Michael Schwern, memiliki utilitas dasar untuk menulis tes. Melihat
Tes::Sederhana.
· "Teks::Seimbang", oleh Damian Conway, telah ditambahkan, untuk mengekstrak teks yang dibatasi
urutan dari string.
gunakan Teks::Balanced 'extract_delimited';
($a, $b) = extract_delimited("'tidak pernah mengatakan tidak pernah', dia tidak pernah mengatakan", "'", '');
$a akan menjadi "'tidak pernah mengatakan tidak pernah'", $b akan menjadi ', dia tidak pernah mengatakan'.
Selain ekstrak_dibatasi(), ada juga ekstrak_bracketed(),
ekstrak_kutipan(), ekstrak_kodeblok(), ekstrak_variabel(), ekstrak_tagged(),
ekstrak_multiple(), gen_delimited_pat(), dan gen_extract_tagged(). Dengan ini, kamu
dapat mengimplementasikan algoritme penguraian yang agak canggih. Lihat Teks::Seimbang.
· "utas", oleh Arthur Bergman, adalah antarmuka untuk benang juru bahasa. Penerjemah
utas (ithreads) adalah model utas baru yang diperkenalkan di Perl 5.6 tetapi hanya tersedia
sebagai antarmuka internal untuk penulis ekstensi (dan untuk Win32 Perl untuk "garpu ()"
emulasi). Lihat utas, utas::dibagikan, dan perlthrtut.
· "utas::dibagikan", oleh Arthur Bergman, memungkinkan berbagi data untuk utas juru bahasa.
Lihat utas::dibagikan.
· "Tie::File", oleh Mark-Jason Dominus, mengaitkan array Perl dengan baris file.
Lihat Tie::File.
· "Tie::Memoize", oleh Ilya Zakharevich, menyediakan hash yang dimuat sesuai permintaan. Melihat
Dasi::Memoize.
· "Tie::RefHash::Nestable", oleh Edward Avis, memungkinkan penyimpanan referensi hash (tidak seperti
standar Tie::RefHash) Modul ini terdapat di dalam Tie::RefHash. Melihat
Dasi::RefHash.
· "Waktu::HiRes", oleh Douglas E. Wegscheid, menyediakan pengaturan waktu resolusi tinggi (ualarm,
usleep, dan gettimeofday). Lihat Waktu::HiRes.
· "Unicode::UCD" menawarkan antarmuka kueri ke Basis Data Karakter Unicode. Melihat
Unikode::UCD.
· "Unicode::Collate", oleh SADAHIRO Tomoyuki, mengimplementasikan UCA (Unicode Collation
Algoritma) untuk menyortir string Unicode. Lihat Unicode::Collate.
· "Unicode::Normalize", oleh SADAHIRO Tomoyuki, mengimplementasikan berbagai Unicode
bentuk normalisasi. Lihat Unicode::Menormalkan.
· "XS::APItest", oleh Tim Jenness, adalah ekstensi uji yang menggunakan XS API. Saat ini
hanya "printf()" yang diuji: cara menampilkan berbagai tipe data dasar dari XS.
· "XS::Typemap", oleh Tim Jenness, adalah ekstensi uji yang melatih peta tipe XS.
Tidak ada yang diinstal, tetapi kode ini layak dipelajari untuk penulis ekstensi.
Updated Dan peningkatan Modul dan Pragmatis
· Modul yang didukung secara independen berikut telah diperbarui ke versi terbaru
dari CPAN: CGI, CPAN, DB_File, File::Spec, File::Temp, Getopt::Long, Math::BigFloat,
Math::BigInt, bundel podlator (Pod::Man, Pod::Text), Pod::LaTeX [561+],
Pod::Parser, Dapat Disimpan, Istilah::ANSIColor, Test, Text-Tab+Wrap.
· atribut::reftype() sekarang bekerja pada argumen terikat.
· AutoLoader sekarang dapat dinonaktifkan dengan "tidak ada AutoLoader;".
· B::Deparse telah ditingkatkan secara signifikan oleh Robin Houston. Sekarang bisa pergi
hampir semua test suite standar (sehingga tes tetap berhasil). Ada sebuah
buat target "test.deparse" untuk mencoba ini.
· Carp sekarang memiliki dokumentasi antarmuka yang lebih baik, dan antarmuka @CARP_NOT telah
ditambahkan untuk mendapatkan kontrol opsional atas di mana kesalahan dilaporkan secara independen dari @ISA, oleh
Ben Tilly.
· Kelas::Struct sekarang dapat menentukan kelas dalam waktu kompilasi.
· Kelas::Struct sekarang menetapkan elemen array/hash jika pengakses dipanggil dengan
array/elemen hash sebagai matahari argumen.
· Nilai kembali dari Cwd::fastcwd() sekarang tercemar.
· Data::Dumper sekarang memiliki opsi untuk mengurutkan hash.
· Data::Dumper sekarang memiliki opsi untuk membuang referensi kode menggunakan B::Deparse.
· DB_File sekarang mendukung versi Berkeley DB yang lebih baru, di antara peningkatan lainnya.
· Devel::Peek sekarang memiliki antarmuka untuk statistik memori Perl (ini hanya berfungsi jika
Anda menggunakan malloc Perl, dan jika Anda telah mengkompilasi dengan debugging).
· Modul bahasa Inggris sekarang dapat digunakan tanpa kinerja terkenal yang dipukul dengan mengatakan
gunakan bahasa Inggris '-no_match_vars';
(Dengan asumsi, tentu saja, bahwa Anda tidak memerlukan variabel bermasalah "$`", $&, atau
"$'".) Juga, memperkenalkan @LAST_MATCH_START dan @LAST_MATCH_END alias bahasa Inggris untuk
"@-" dan "@+".
· ExtUtils::MakeMaker telah dibersihkan dan diperbaiki secara signifikan. Versi yang disempurnakan
juga telah di-backport ke rilis Perl sebelumnya dan diserahkan ke CPAN sehingga
rilis sebelumnya dapat menikmati perbaikannya.
· Argumentasi TulisMakefile() di Makefile.PL sekarang lebih banyak diperiksa kewarasannya
hati-hati dari sebelumnya. Ini dapat menyebabkan peringatan baru ketika modul sedang diinstal.
Lihat ExtUtils::MakeMaker untuk lebih jelasnya.
· ExtUtils::MakeMaker sekarang menggunakan File::Spec secara internal, yang diharapkan mengarah ke lebih baik
portabilitas.
· Fcntl, Socket, dan Sys::Syslog telah ditulis ulang oleh Nicholas Clark untuk menggunakan yang baru-
gaya bagian pengiriman konstan (lihat ExtUtils::Constant). Ini berarti bahwa mereka akan
menjadi lebih kuat dan mudah-mudahan lebih cepat.
· File::Temukan sekarang chdir()s dengan benar saat mengejar tautan simbolik. [561]
· File::Find sekarang memiliki panggilan balik sebelum dan sesudah pemrosesan. Itu juga berubah dengan benar
direktori saat mengejar tautan simbolik. Panggilan balik (dengan nakal) keluar dengan "berikutnya;"
bukannya "kembali;" sekarang bekerja.
· File::Find sekarang (lagi) masuk kembali. Itu juga telah dibuat lebih portabel.
· Peringatan yang dikeluarkan oleh File::Find sekarang termasuk dalam kategori mereka sendiri. Kamu bisa
aktifkan/nonaktifkan dengan "gunakan/tanpa peringatan 'File::Find';".
· Berkas::Glob::glob() telah diubah namanya menjadi Berkas::Glob::bsd_glob() karena namanya bentrok
dengan bawaan gumpal(). Nama yang lebih lama masih tersedia untuk kompatibilitas, tetapi adalah
usang. [561]
· File::Glob sekarang mendukung konstanta "GLOB_LIMIT" untuk membatasi ukuran daftar yang dikembalikan
dari nama file.
· IPC::Open3 sekarang memungkinkan penggunaan deskriptor file numerik.
· IO::Socket sekarang memiliki tanda () metode, yang mengembalikan nilai true jika soket diposisikan
pada tanda out-of-band. Metode ini juga dapat diekspor sebagai tanda sockat() fungsi.
· IO::Socket::INET gagal membuka port yang ditentukan jika nama layanan tidak diketahui.
Sekarang dengan benar menggunakan nomor port yang disediakan apa adanya. [561]
· IO::Socket::INET memiliki dukungan untuk opsi ReusePort (jika platform Anda mendukungnya).
Opsi Reuse sekarang memiliki alias, ReuseAddr. Untuk kejelasan, Anda mungkin ingin memilih
Gunakan kembali Addr.
· IO::Socket::INET sekarang mendukung nilai nol untuk "LocalPort" (biasanya berarti
sistem operasi akan membuat satu.)
· 'gunakan lib' sekarang bekerja secara identik dengan @INC. Menghapus direktori dengan 'no lib' sekarang
bekerja.
· Math::BigFloat dan Math::BigInt telah mengalami penulisan ulang penuh oleh Tels. Mereka sekarang
besarnya lebih cepat, dan mereka mendukung berbagai perpustakaan bignum seperti GMP dan PARI sebagai
backend mereka.
· Math::Complex menangani inf, NaN dll., lebih baik.
· Net::Ping telah ditingkatkan secara signifikan oleh Rob Brown: multihoming sekarang didukung,
Fungsionalitas Win32 lebih baik, sekarang ada fungsi pengukuran waktu (opsional
resolusi tinggi menggunakan Time::HiRes), dan sekarang ada protokol "eksternal" yang menggunakan
Net::Ping::Modul eksternal yang menjalankan utilitas ping eksternal Anda dan mem-parsing
keluaran. Versi Net::Ping::External tersedia di CPAN.
Perhatikan bahwa beberapa tes Net::Ping dinonaktifkan saat dijalankan di bawah Perl
distribusi karena seseorang tidak dapat mengasumsikan satu atau lebih hal berikut: port gema yang diaktifkan
di localhost, konektivitas Internet penuh, atau firewall simpatik. Anda dapat mengatur
variabel lingkungan PERL_TEST_Net_Ping ke "1" (satu) sebelum menjalankan tes Perl
suite untuk mengaktifkan semua tes Net::Ping.
· POSIX::sigaksi() sekarang jauh lebih fleksibel dan kuat. Anda sekarang dapat menginstal coderef
penangan, penangan 'DEFAULT', dan 'IGNORE', menginstal penangan baru tidak atomik.
· Di Brankas, %INC sekarang dilokalkan di kompartemen Aman sehingga penggunaan/memerlukan pekerjaan.
· Dalam SDBM_File pada platform DOSish, beberapa kunci hilang karena kurangnya dukungan
untuk file dengan "lubang". Solusi untuk masalah telah ditambahkan.
· Dalam Pencarian::Dict sekarang dapat memiliki pengait pra-pemrosesan untuk baris yang sedang dicari.
· Modul Shell sekarang memiliki antarmuka OO.
· Di Sys::Syslog sekarang ada mekanisme failover yang akan melalui alternatif
mekanisme koneksi hingga pesan berhasil dicatat.
· Modul Uji telah ditingkatkan secara signifikan.
· Waktu::Lokal::waktulokal() tidak menangani detik pecahan lagi. Alasannya adalah
itu juga tidak waktu lokal(), dan waktu lokal() dan waktu lokal() seharusnya
invers satu sama lain.
· Pragma vars sekarang mendukung mendeklarasikan variabel yang sepenuhnya memenuhi syarat. (Sesuatu yang
"kami ()" tidak dan tidak akan mendukung.)
· Ruang nama "utf8::" (seperti dalam pragma) menyediakan berbagai fungsi Perl-callable untuk
menyediakan akses tingkat rendah ke representasi Unicode internal Perl. Saat ini
hanya panjang() telah dilaksanakan.
Kegunaan Perubahan
· Mode perl Emacs (emacs/cperl-mode.el) telah diperbarui ke versi 4.31.
· emacs/e2ctags.pl sekarang jauh lebih cepat.
· "enc2xs" adalah alat untuk orang yang menambahkan pengkodean mereka sendiri ke modul Encode.
· "h2ph" sekarang mendukung trigraf C.
· "h2xs" sekarang menghasilkan template README.
· "h2xs" sekarang menggunakan "Devel::PPPort" untuk portabilitas yang lebih baik di antara berbagai versi
Perl.
· "h2xs" menggunakan modul ExtUtils::Constant baru yang akan memengaruhi yang baru dibuat
ekstensi yang mendefinisikan konstanta. Karena kode baru lebih benar (jika Anda memiliki dua
konstanta di mana yang pertama adalah awalan dari yang kedua, konstanta pertama tak pernah
terdefinisi), lebih sedikit lossy (menggunakan bilangan bulat untuk konstanta bilangan bulat, berbeda dengan yang lama
kode yang menggunakan angka floating point bahkan untuk konstanta integer), dan sedikit
lebih cepat, Anda mungkin ingin mempertimbangkan untuk membuat ulang kode ekstensi Anda (skema baru
memudahkan regenerasi). h2xs sekarang juga mendukung trigraf C.
· "libnetcfg" telah ditambahkan untuk mengkonfigurasi libnet.
· "perlbug" sekarang jauh lebih kuat. Itu juga mengirimkan laporan bug ke perl.org, bukan
perl.com.
· "perlcc" telah ditulis ulang dan antarmuka penggunanya (yaitu, baris perintah) jauh lebih banyak
lebih seperti kompiler Unix C, cc. (Alat perlbc telah dihapus. Gunakan
"perlcc -B" sebagai gantinya.) Note bahwa perlcc is masih dianggap sangat eksperimental dan
tidak didukung. [561]
· "perlivp" adalah utilitas Prosedur Verifikasi Instalasi baru untuk dijalankan kapan saja
setelah menginstal Perl.
· "piconv" adalah implementasi dari utilitas konversi karakter "iconv",
mendemonstrasikan modul Encode baru.
· "pod2html" sekarang memungkinkan menentukan direktori cache.
· "pod2html" sekarang menghasilkan XHTML 1.0.
· "pod2html" sekarang memahami POD yang ditulis menggunakan akhiran baris yang berbeda (CRLF seperti PC
versus LF mirip-Unix versus CR mirip-MacClassic).
· "s2p" telah sepenuhnya ditulis ulang dalam Perl. (Ini sebenarnya adalah implementasi penuh dari
sed di Perl: Anda dapat menggunakan fungsionalitas sed dengan menggunakan utilitas "psed".)
· "xsubpp" sekarang memahami dokumentasi POD yang disematkan dalam file *.xs. [561]
· "xsubpp" sekarang mendukung kata kunci OUT.
New Dokumentasi
· perl56delta merinci perubahan antara rilis 5.005 dan rilis 5.6.0.
· perlclib mendokumentasikan penggantian internal untuk fungsi pustaka C standar.
(Menarik hanya untuk penulis ekstensi dan peretas inti Perl.) [561+]
· perldebtut adalah tutorial debugging Perl. [561+]
· perlebcdic berisi pertimbangan untuk menjalankan Perl pada platform EBCDIC. [561+]
· perlintro adalah pengantar yang lembut untuk Perl.
· perliol mendokumentasikan internal PerlIO dengan lapisan.
· perlmodstyle adalah panduan gaya untuk menulis modul.
· perlnewmod menceritakan tentang menulis dan mengirimkan modul baru. [561+]
· perlpacktut adalah mengemas() tutorial.
· perlpod telah ditulis ulang agar lebih jelas dan untuk merekam praktik terbaik yang dikumpulkan
selama bertahun-tahun.
· perlpodspec adalah spesifikasi format pod yang lebih formal, terutama untuk
penulis aplikasi pod, bukan untuk orang yang menulis di pod.
· perlretut adalah tutorial ekspresi reguler. [561+]
· perlrequick adalah panduan memulai cepat ekspresi reguler. Ya, jauh lebih cepat dari
perlretut. [561]
· perltodo telah diperbarui.
· perltootc telah diubah namanya menjadi perltooc (agar tidak bertentangan dengan perltoot di
sistem file terbatas pada nama "8.3").
· perluniintro adalah pengantar untuk menggunakan Unicode di Perl. (perlunicode lebih dari
referensi rinci dan informasi latar belakang)
· perlutil menjelaskan utilitas baris perintah yang dikemas dengan distribusi Perl.
[561+]
Dokumen khusus platform berikut tersedia sebelum penginstalan sebagai:
BACA AKU.Platform, dan setelah instalasi sebagai perlPlatform:
perlaix perlamiga perlapollo perlbeos perlbs2000
perlce perlcygwin perldgux perldo perlepoc perlfreebsd perlhpux
perlhurd perliix perlmachten perlmacos perlmint perlmpeix
perlnetware perlos2 perlos390 perlplan9 perlqnx perlsolaris
perltru64 perlu perlvmesa perlvms perlvos perlwin32
Dokumen-dokumen ini biasanya merinci satu atau lebih subjek berikut: mengkonfigurasi,
membangun, menguji, menginstal, dan terkadang juga menggunakan Perl pada platform tersebut.
Pengguna Perl Asia Timur kini disambut dalam bahasa mereka sendiri: README.jp (Jepang),
README.ko (Bahasa Korea), README.cn (Cina Sederhana) dan README.tw (Cina Tradisional),
yang ditulis dalam pod normal tetapi dikodekan dalam EUC-JP, EUC-KR, EUC-CN dan Big5. Ini
akan diinstal sebagai
perljp perlko perlcn perltw
· Dokumentasi untuk platform POSIX-BC disebut "BS2000", untuk menghindari kebingungan
dengan modul Perl POSIX.
· Dokumentasi untuk platform WinCE disebut perlce (README.ce dalam sumbernya
kit kode), untuk menghindari kebingungan dengan dokumentasi perlwin32 pada 8.3-dibatasi
sistem file.
Performance tambahan
· peta() bisa menjadi lambat secara patologis ketika daftar hasil yang dihasilkannya lebih besar dari
daftar sumber. Kinerja telah ditingkatkan untuk skenario umum. [561]
· menyortir() juga sepenuhnya masuk kembali, dalam arti bahwa fungsi sortir dapat memanggil sendiri
menyortir(). Ini tidak bekerja dengan andal di rilis sebelumnya. [561]
· menyortir() telah diubah untuk menggunakan terutama mergesort secara internal sebagai lawan dari
quicksort sebelumnya. Untuk daftar yang sangat kecil, ini dapat menghasilkan penyortiran yang sedikit lebih lambat
kali, tetapi secara umum speedup harus setidaknya 20%. Bonus tambahan adalah itu
perilaku kasus terburuk dari menyortir() sekarang lebih baik (dalam istilah ilmu komputer sekarang
berjalan dalam waktu O(N log N), sebagai lawan dari waktu proses terburuk Theta(N**2) quicksort
perilaku), dan itu menyortir() sekarang stabil (artinya elemen dengan kunci identik
akan tetap dipesan seperti sebelum disortir). Lihat pragma "sort" untuk
informasi.
Ceritanya lebih detail: misalkan Anda ingin menyajikan sepotong kecil Pi untuk diri sendiri.
@digit = ( 3,1,4,1,5,9 );
Semacam numerik dari digit akan menghasilkan (1,1,3,4,5,9), seperti yang diharapkan. Yang 1 datang
pertama sulit untuk diketahui, karena yang satu terlihat sangat mirip dengan yang lain. Anda dapat menganggap
ini sebagai benar-benar sepele, atau agak mendalam. Namun, jika Anda hanya ingin mengurutkan
angka genap di depan yang ganjil, lalu apa yang akan
sort { ($a % 2) <=> ($b % 2) } @digits;
menghasilkan? Satu-satunya angka genap, 4, akan didahulukan. Tapi bagaimana dengan angka ganjil, yang
semua membandingkan sama? Dengan algoritma quicksort yang digunakan untuk mengimplementasikan Perl 5.6 dan
sebelumnya, urutan ikatan diserahkan kepada pengurutan. Jadi, saat Anda menambahkan lebih banyak lagi
digit Pi, urutan kemunculan digit genap dan ganjil yang diurutkan akan berubah.
dan, untuk potongan Pi yang cukup besar, algoritme quicksort di Perl 5.8 tidak akan
mengembalikan hasil yang sama bahkan jika dipanggil kembali dengan input yang sama. Pembenaran untuk
ini terletak pada perilaku kasus terburuk quicksort. Jika kamu lari
sort { $a <=> $b } ( 1 .. $N , 1 .. $N );
(sesuatu yang mungkin Anda perkirakan jika Anda ingin menggabungkan dua array yang diurutkan menggunakan sort),
menggandakan $N tidak hanya menggandakan waktu quicksort, itu lipat empat dia. Quicksort memiliki
run time kasus terburuk yang bisa tumbuh seperti N**2, disebut kuadrat perilaku, dan itu bisa
terjadi pada pola yang mungkin muncul dalam penggunaan normal. Anda tidak akan melihat ini untuk yang kecil
array, tapi kamu akan perhatikan dengan array yang lebih besar, dan Anda mungkin tidak hidup cukup lama
untuk pengurutan untuk diselesaikan pada larik sejuta elemen. Jadi quicksort 5.8
mengacak array besar sebelum menyortirnya, sebagai pertahanan statistik melawan kuadrat
perilaku. Tapi itu berarti jika Anda mengurutkan array besar yang sama dua kali, ikatan mungkin terputus
dengan berbagai cara.
Karena urutan pemutusan ikatan yang tidak dapat diprediksi, dan kasus terburuk kuadrat
perilaku, quicksort adalah hampir diganti sepenuhnya dengan mergesort yang stabil. Stabil
berarti ikatan diputus untuk mempertahankan urutan asli penampilan di input
Himpunan. Jadi
sort { ($a % 2) <=> ($b % 2) } (3,1,4,1,5,9);
akan menghasilkan (4,3,1,1,5,9), dijamin. Angka genap dan ganjil muncul di output
dalam urutan yang sama mereka muncul di input. Mergesort memiliki kasus terburuk O(N log N)
perilaku, nilai terbaik yang dapat dicapai. Dan, ironisnya, penggabungan ini tidak
sangat baik di mana quicksort menjadi kuadrat: mergesort sort (1..$N, 1..$N) di
Tepat waktu. Tapi quicksort diselamatkan pada saat terakhir karena lebih cepat dari
mergesort pada input dan platform tertentu. Misalnya, jika Anda benar-benar tidak yang
tentang urutan angka genap dan ganjil, quicksort akan berjalan dalam waktu O(N); itu sangat
pandai menyortir banyak pengulangan dari sejumlah kecil elemen yang berbeda. Itu
strategi membagi dan menaklukkan quicksort bekerja dengan baik pada platform dengan relatif kecil,
sangat cepat, cache. Akhirnya, masalahnya direduksi menjadi masalah yang cocok di
cache, dari titik mana ia mendapat manfaat dari peningkatan kecepatan memori.
Quicksort diselamatkan dengan menerapkan pragma semacam untuk mengontrol aspek semacam itu.
stabil subpragma memaksa perilaku yang stabil, terlepas dari algoritma. Itu _quicksort
dan _mergesort subpragma adalah cara yang sulit untuk memilih yang mendasarinya
penerapan. Awalan "_" adalah pengingat bahwa subpragma ini mungkin tidak akan bertahan
melebihi 5.8. Ada mekanisme yang lebih tepat untuk memilih implementasi, tetapi
mereka tidak akan tiba tepat waktu untuk menyelamatkan quicksort.
· Hash sekarang menggunakan algoritma kunci hashing "One-at-a-Time" Bob Jenkins (
http://burtleburtle.net/bob/hash/doobs.html ). Algoritma ini cukup cepat
sambil menghasilkan penyebaran nilai yang jauh lebih baik daripada algoritma hashing lama
(aslinya oleh Chris Torek, kemudian diubah oleh Ilya Zakharevich). Keluaran nilai hash
dari algoritme pada hash semua kunci ASCII 3-char yang dapat dicetak lebih dekat ke
lulus tes generasi nomor acak DIEHARD. Menurut perlbench, ini
perubahan tidak mempengaruhi kecepatan Perl secara keseluruhan.
· tidak bergeser() sekarang harus terasa lebih cepat.
Instalasi dan konfigurasi Perbaikan
Umum Perbaikan
· INSTALL sekarang menjelaskan bagaimana Anda dapat mengkonfigurasi Perl untuk menggunakan bilangan bulat 64-bit bahkan pada
platform non-64-bit.
· Perubahan kebijakan Policy.sh: jika Anda menggunakan kembali file Policy.sh (lihat INSTALL) dan Anda menggunakan
Konfigurasikan -Dprefix=/foo/bar dan di Kebijakan lama $prefix eq $siteprefix dan $prefix
eq $vendorprefix, semuanya sekarang akan diubah menjadi awalan baru, /foo/bar.
(Sebelumnya hanya $prefix yang diubah.) Jika Anda tidak menyukai perilaku baru ini, tentukan
prefix, siteprefix, dan vendorprefix secara eksplisit.
· Lokasi opsional baru untuk perpustakaan Perl, otherlibdirs, tersedia. Bisa jadi
digunakan misalnya untuk pengaya vendor tanpa mengganggu direktori perpustakaan Perl sendiri.
· Di banyak platform, 'cc' yang disediakan vendor terlalu dilucuti untuk membuat Perl
(pada dasarnya, 'cc' tidak melakukan ANSI C). Jika ini masalahnya dan 'cc' tidak
tampaknya menjadi kompiler GNU C 'gcc', upaya otomatis dilakukan untuk menemukan dan menggunakan
'gcc' sebagai gantinya.
· gcc perlu melacak rilis sistem operasi dengan cermat untuk menghindari masalah build. Jika
Konfigurasi menemukan bahwa gcc dibuat untuk rilis sistem operasi yang berbeda dari sebelumnya
berjalan, sekarang memberikan peringatan yang terlihat jelas bahwa mungkin ada masalah di depan.
· Karena Perl 5.8 tidak kompatibel dengan biner dengan rilis Perl sebelumnya, Konfigurasi no
lagi menyarankan termasuk modul 5.005 di @INC.
· Konfigurasi "-S" sekarang dapat berjalan secara non-interaktif. [561]
· Dukungan konfigurasi untuk model memori gaya pdp11 telah dihapus karena usang.
[561]
· configure.gnu sekarang bekerja dengan opsi dengan spasi di dalamnya.
· installperl sekarang menampilkan semuanya ke STDERR.
· Karena PerlIO sekarang menjadi default di sebagian besar platform, "-perlio" tidak ditambahkan ke
$Config{archname} (juga dikenal sebagai $^O) lagi. Sebaliknya, jika Anda secara eksplisit memilih
untuk tidak menggunakan perlio (Konfigurasikan opsi baris perintah -Uuseperlio), Anda akan mendapatkan "-stdio"
ditambahkan.
· Perubahan lain yang terkait dengan nama arsitektur adalah bahwa "-64all" (-Duse64bitall, atau
"maksimal 64-bit") ditambahkan hanya jika lebar pointer Anda 64 bit. (Tepatnya,
use64bitall diabaikan.)
· Dalam instalasi AFS, seseorang dapat mengonfigurasi root AFS agar berada di tempat lain selain
default /afs dengan menggunakan parameter Configure "-Dafsroot=/some/where/else".
· APPLIB_EXP, definisi waktu konfigurasi yang kurang dikenal, telah didokumentasikan. Dia
dapat digunakan untuk menambahkan direktori khusus situs ke jalur pencarian default Perl (@INC);
lihat INSTALL untuk informasi.
· Versi Berkeley DB digunakan saat Perl (dan, mungkin, ekstensi DB_File)
dibangun sekarang tersedia sebagai @Config{qw(db_version_major db_version_minor
db_version_patch)} dari Perl dan sebagai "DB_VERSION_MAJOR_CFG DB_VERSION_MINOR_CFG
DB_VERSION_PATCH_CFG" dari C.
· Membangun Berkeley DB3 untuk mode kompatibilitas untuk DB, NDBM, dan ODBM telah
didokumentasikan dalam INSTALL.
· Jika Anda memiliki akses CPAN (baik jaringan atau salinan lokal seperti CD-ROM), Anda dapat
selama menentukan modul tambahan untuk Mengkonfigurasi untuk membangun dan menginstal dengan Perl menggunakan
-Dextras=... pilihan. Lihat INSTALL untuk lebih jelasnya.
· Selain config.over, file override baru, config.arch, tersedia. File ini
seharusnya digunakan oleh penulis file petunjuk untuk perubahan di seluruh arsitektur (sebagai lawan
ke config.over yang untuk perubahan di seluruh situs).
· Jika sistem file Anda mendukung tautan simbolik, Anda dapat membuat Perl di luar sumbernya
direktori oleh
mkdir perl/build/direktori
cd perl/build/direktori
sh /path/ke/Perl/source/Konfigurasi -Dmksymlinks ...
Ini akan membuat di perl/build/direktori pohon tautan simbolik yang menunjuk ke file di
/path/ke/perl/source. File asli tidak terpengaruh. Setelah Konfigurasi memiliki
selesai, Anda hanya bisa mengatakan
buat semua ujian
dan Perl akan dibangun dan diuji, semuanya di perl/build/direktori. [561]
· Untuk pengembang Perl, beberapa target baru untuk pembuatan profil dan debugging telah
ditambahkan; lihat perlhack.
· Penggunaan gprof alat untuk profil Perl telah didokumentasikan di perlhack. Di sana
adalah target make yang disebut "perl.gprof" untuk menghasilkan Perl . yang diprofilkan
dapat dieksekusi.
· Jika Anda memiliki GCC 3, ada target make yang disebut "perl.gcov" untuk membuat
gcoved Perl dapat dieksekusi untuk analisis cakupan. Lihat perlhack.
· Jika Anda menggunakan platform IRIX atau Tru64, opsi pembuatan profil/debugging baru memiliki
telah ditambahkan; lihat perlhack untuk informasi lebih lanjut tentang pixie dan Third Degree.
· Pedoman bagaimana membangun instalasi Perl minimal telah ditambahkan ke INSTALL.
· Ekstensi Utas sekarang tidak dibuat sama sekali di bawah utas ("Konfigurasi
-Duseithreads") karena itu tidak akan berfungsi (ekstensi Thread membutuhkan
Dikonfigurasi dengan "-Duse5005threads").
Note bahwa itu 5.005 benang adalah tidak didukung dan usang: if Anda memiliki kode tertulis
untuk itu tua benang Anda harus bermigrasi it untuk itu yang baru benang merah Model.
· Makro Gconvert ($Config{d_Gconvert}) digunakan oleh Perl untuk merangkai floating-point
angka sekarang lebih pilih-pilih tentang penggunaan sprintf %.*g aturan untuk konversi. Beberapa
platform yang dulu menggunakan gcvt sekarang dapat menggunakan sprintf yang lebih lambat.
· Metode usang untuk membuat rasa perl khusus (misalnya, debugging) dengan mengatakan
buat LIBPERL=libperld.a
telah dihapus. Gunakan -DDEBUGGING sebagai gantinya.
New Or peningkatan Platform
Untuk daftar platform yang diketahui mendukung Perl, lihat "Platform yang Didukung" di perlport.
· Pemuatan dinamis AIX sekarang harus didukung dengan lebih baik.
· AIX sekarang harus bekerja lebih baik dengan gcc, utas, dan 64-bitness. Juga ganda panjang
dukungan di AIX harus lebih baik sekarang. Lihat perlaix.
· AtheOS ( http://www.atheos.cx/ ) adalah platform baru.
· BeOS telah direklamasi.
· Platform DG/UX sekarang mendukung utas bergaya 5.005. Lihat perldgux.
· Platform DYNIX/ptx (juga dikenal sebagai dynixptx) didukung pada atau di dekat osver 4.5.2.
· Platform EBCDIC (z/OS (juga dikenal sebagai OS/390), POSIX-BC, dan VM/ESA) telah
kembali. Banyak tes suite uji masih gagal dan koeksistensi Unicode dan EBCDIC
tidak cukup menetap, tetapi situasinya jauh lebih baik daripada dengan Perl 5.6. Melihat
perlos390, perlbs2000 (untuk POSIX-BC), dan perlvmesa untuk informasi lebih lanjut. (Catatan:
dukungan untuk VM/ESA telah dihapus di Perl v5.18.0. Informasi yang relevan ada di
README.vmesa)
· Membangun perl dengan -Duseithreads atau -Duse5005threads sekarang berfungsi di bawah HP-UX 10.20
(sebelumnya hanya berfungsi di bawah 10.30 atau lebih baru). Anda akan membutuhkan perpustakaan utas
paket diinstal. Lihat README.hpux. [561]
· Mac OS Classic sekarang didukung dalam paket sumber utama (MacPerl memiliki
kursus telah tersedia sejak Perl 5.004 tetapi sekarang basis kode sumber dari Perl . standar
dan MacPerl telah disinkronkan) [561]
· Mac OS X (atau Darwin) sekarang seharusnya dapat membangun Perl bahkan pada sistem file HFS+. (Itu
case-insensitivity digunakan untuk membingungkan proses build Perl.)
· NCR MP-RAS sekarang didukung. [561]
· Semua tambalan khusus NetBSD (kecuali untuk tambalan khusus penginstalan) telah
digabung kembali ke distribusi utama.
· NetWare dari Novell sekarang didukung. Lihat perlnetware.
· NonStop-UX sekarang didukung. [561]
· NEC SUPER-UX sekarang didukung.
· Semua patch khusus OpenBSD (kecuali yang khusus untuk instalasi) telah
digabung kembali ke distribusi utama.
· Perl telah diuji dengan paket utas tingkat pengguna GNU pth (
http://www.gnu.org/software/pth/pth.html ). Semua tes utas Perl sekarang berfungsi, tetapi
bukan tanpa menambahkan beberapa menghasilkan()s ke tes, jadi sementara pth (dan tingkat pengguna lainnya
implementasi utas) dapat dianggap "bekerja" dengan utas Perl, tetap
perhatikan kemungkinan non-preemptability dari implementasi utas yang mendasarinya.
· Stratus VOS sekarang didukung menggunakan metode build asli Perl (Configure). Ini
metode yang disarankan untuk membangun Perl di VOS. Metode lama, yang membangun miniperl,
masih tersedia. Lihat perlvo. [561+]
· Platform mainframe Amdahl UTS Unix sekarang didukung. [561]
· WinCE sekarang didukung. Lihat perlce.
· z/OS (sebelumnya dikenal sebagai OS/390, sebelumnya dikenal sebagai MVS OE) sekarang memiliki dukungan untuk dinamis
Memuat. Ini tidak dipilih secara default, namun, Anda harus menentukan -Dusedl di
argumen Konfigurasi. [561]
Terpilih Bug Perbaikan
Banyak kebocoran memori dan akses memori yang tidak diinisialisasi telah diburu. Paling
yang penting, subs anonim sering bocor. [561]
· Pragma penggunaan otomatis tidak berfungsi untuk Multi::Part::Function::Names.
· penelepon() dapat menyebabkan core dump dalam situasi tertentu. Ikan mas terkadang dipengaruhi oleh
masalah ini. Khususnya, penelepon() sekarang mengembalikan nama subrutin "(tidak diketahui)"
untuk subrutin yang telah dihapus dari tabel simbol.
· chop(@list) dalam konteks daftar mengembalikan karakter yang dipotong dalam urutan terbalik. Ini
telah dibalik menjadi urutan yang benar. [561]
· Konfigurasi tidak lagi menyertakan pustaka DBM (dbm, gdbm, db, ndbm) saat membangun
Perl biner. Satu-satunya pengecualian untuk ini adalah SunOS 4.x, yang membutuhkannya. [561]
· Perilaku konstanta string non-desimal tetapi numerik seperti "0x23" adalah platform-
dependen: di beberapa platform yang terlihat sebagai 35, di beberapa sebagai 0, di beberapa sebagai mengambang
nomor poin (jangan tanya). Ini disebabkan oleh Perl menggunakan sistem operasi
perpustakaan dalam situasi di mana hasil dari konversi string ke angka adalah
undefined: sekarang Perl secara konsisten menangani string seperti nol dalam konteks numerik.
· Beberapa perbaikan debugger: kode keluar sekarang mencerminkan kode keluar skrip, kondisi "0" sekarang
diperlakukan dengan benar, perintah "d" sekarang memeriksa nomor baris, $. tidak lagi mendapat
rusak, dan semua keluaran debugger sekarang masuk ke soket dengan benar jika RemotePort
mengatur. [561]
· Debugger (perl5db.pl) telah dimodifikasi untuk menyajikan perintah yang lebih konsisten
antarmuka, melalui (CommandSet=580). perl5db.t juga ditambahkan untuk menguji perubahan, dan sebagai
tempat untuk tes lebih lanjut.
Lihat perldebug.
· Debugger memiliki opsi "dumpDepth" baru untuk mengontrol kedalaman maksimum yang disarangkan
struktur dibuang. Perintah "x" telah diperpanjang sehingga "x N EXPR" dibuang
nilai exp ke kedalaman paling banyak N tingkat.
· Debugger sekarang dapat menampilkan variabel leksikal jika Anda memiliki modul CPAN PadWalker
diinstal.
· Urutan HANCUR telah dibuat lebih dapat diprediksi.
· Perl 5.6.0 dapat mengeluarkan peringatan palsu tentang redefinisi dari dl_kesalahan() ketika
membuat ekstensi secara statis menjadi Perl. Ini telah diperbaiki. [561]
· dprofpp -R tidak berfungsi.
· *foo{FORMAT} sekarang berfungsi.
· Infinity sekarang diakui sebagai angka.
· UNIVERSAL::isa tidak lagi melakukan cache metode yang salah. (Ini merusak ekstensi Tk
dengan 5.6.0.) [561]
· Leksikal I: leksikal di luar eval "" tidak diselesaikan dengan benar di dalam subrutin
definisi di dalam eval "" jika belum direferensikan di tingkat atas
kode evaluasi""ed.
· Lexicals II: lexicals bocor pada lingkup file ke dalam subrutin yang dideklarasikan sebelumnya
leksikal.
· Peringatan leksikal sekarang menyebar dengan benar di antara cakupan dan ke dalam "eval "..."".
· "gunakan peringatan qw(FATAL semua)" tidak berfungsi sebagaimana mestinya. Ini telah diperbaiki. [561]
· peringatan::diaktifkan() sekarang melaporkan status $^W dengan benar jika penelepon tidak menggunakan
peringatan leksikal. [561]
· Penomoran ulang baris dengan eval dan "#line" sekarang berfungsi. [561]
· Memperbaiki banyak kebocoran memori, terutama di eval "".
· Variabel terikat yang dilokalkan tidak lagi membocorkan memori
gunakan Tie::Hash;
ikat %tied_hash saya => 'Tie::StdHash';
...
# Digunakan untuk membocorkan memori setiap kali local() dipanggil;
# dalam satu lingkaran, ini ditambahkan.
lokal($tied_hash{Foo}) = 1;
· Elemen hash yang dilokalkan (dan %ENV) tidak dilokalkan dengan benar agar tidak ada, jika mereka
tidak sebelum mereka dilokalisasi.
gunakan Tie::Hash;
ikat %tied_hash saya => 'Tie::StdHash';
...
# Tidak ada yang mengatur elemen FOO sejauh ini
{ lokal $tied_hash{FOO} = 'Bar' }
# Ini digunakan untuk mencetak, tetapi tidak sekarang.
print "ada!\n" jika ada $tied_hash{FOO};
Sebagai efek samping dari perbaikan ini, antarmuka hash terikat harus tentukan EXISTS dan DELETE
metode.
· mkdir() sekarang mengabaikan garis miring di nama direktori, seperti yang diamanatkan oleh POSIX.
· Beberapa versi glibc rusak modfl(). Ini memengaruhi build dengan
"-Duselongdouble". Versi Perl ini mendeteksi kerusakan ini dan memiliki solusi
untuk itu. Rilis glibc 2.2.2 diketahui telah memperbaiki modfl() serangga.
· Modulus nomor yang tidak ditandatangani sekarang berfungsi (4063328477 % 65535 digunakan untuk mengembalikan 27406,
bukannya 27047). [561]
· Beberapa peringatan "bukan angka" yang diperkenalkan di 5.6.0 dihilangkan agar lebih kompatibel dengan
5.005. Infinity sekarang diakui sebagai angka. [561]
· Konversi numerik tidak mengenali perubahan nilai string dengan benar secara pasti
keadaan. [561]
· Atribut (seperti :shared) tidak bekerja dengan kita().
· kita() variabel tidak akan menyebabkan peringatan palsu "Variabel tidak akan tetap dibagikan". [561]
· Variabel "kami" dengan nama yang sama yang dideklarasikan dalam dua blok saudara menghasilkan kesalahan
peringatan tentang "deklarasi ulang" dari variabel. Masalahnya telah diperbaiki.
[561]
· pack "Z" sekarang dengan benar mengakhiri string dengan "\0".
· Perbaiki rutinitas kata sandi yang disebabkan oleh beberapa platform kata sandi bayangan (misalnya HP-UX)
berangkat() untuk mengembalikan setiap entri lainnya.
· Variabel lingkungan PERL5OPT (untuk meneruskan argumen baris perintah ke Perl) tidak
bekerja untuk lebih dari satu kelompok pilihan. [561]
· PERL5OPT dengan ruang tertanam tidak berfungsi.
· cetakf() tidak lagi me-reset lokal numerik ke "C".
· "qw(a\\b)" sekarang diurai dengan benar sebagai 'a\\b': yaitu, sebagai tiga karakter, bukan empat.
[561]
· pos() tidak mengembalikan nilai yang benar dalam s///ge di versi sebelumnya. Ini sekarang
ditangani dengan benar. [561]
· Mencetak segi empat (bilangan bulat 64-bit) dengan printf/sprintf sekarang berfungsi tanpa q L ll
awalan (dengan asumsi Anda menggunakan platform berkemampuan quad).
· Ekspresi reguler pada referensi dan skalar kelebihan beban sekarang berfungsi. [561+]
· Sihir sisi kanan (GMAGIC) dalam banyak kasus seperti penggabungan string menjadi
terlalu sering dipanggil.
· skalar() sekarang memaksa konteks skalar bahkan ketika digunakan dalam konteks kosong.
· Dukungan SOCKS sekarang jauh lebih kuat.
· menyortir() argumen sekarang dikompilasi dalam konteks wantarray yang tepat (mereka adalah
secara tidak sengaja menggunakan konteks menyortir() diri). Blok perbandingan sekarang dijalankan
dalam konteks skalar, dan argumen yang akan diurutkan selalu disediakan konteks daftar.
[561]
· Mengubah kelas karakter POSIX "[[:spasi:]]" untuk menyertakan (sangat jarang digunakan)
karakter tab vertikal. Menambahkan kelas karakter POSIX-ish baru "[[:blank:]]" yang
singkatan spasi horizontal (saat ini, spasi dan tab).
· Perilaku menodai lari cepat() telah dirasionalisasi. Itu tidak mengotori
hasil format floating point lagi, membuat perilaku konsisten dengan
interpolasi string. [561]
· Beberapa kasus propagasi noda yang tidak konsisten (seperti dalam nilai hash) telah
tetap.
· Mesin RE yang ditemukan di Perl 5.6.0 secara tidak sengaja meremehkan beberapa jenis sederhana
pencocokan pola. Ini sekarang ditangani dengan lebih baik. [561]
· Output debug ekspresi reguler (baik melalui "use re 'debug'" atau melalui "-Dr") sekarang
Terlihat lebih baik. [561]
· Pencocokan multi-baris seperti ""a\nxb\n" =~ /(?!\A)x/m" cacat. Bugnya sudah
tetap. [561]
· Penggunaan $& dapat memicu dump inti dalam beberapa situasi. Ini sekarang dihindari. [561]
· Sub-kecocokan yang ditangkap ekspresi reguler ($ 1, $2, ...) sekarang lebih konsisten
tidak disetel jika kecocokan gagal, alih-alih membiarkan data palsu tergeletak di dalamnya. [561]
· garis baca() pada file yang dibuka dalam mode "slurp" dapat mengembalikan "" tambahan (baris kosong) di
akhir dalam situasi tertentu. Ini telah diperbaiki. [561]
· Autovivifikasi referensi simbolik dari variabel khusus yang dijelaskan dalam perlvar (sebagai
di "${$num}") tidak sengaja dinonaktifkan. Ini berfungsi lagi sekarang. [561]
· Sys::Syslog mengabaikan konstanta "LOG_AUTH".
· $OTOMATIS, menyortir(), kunci(), dan memunculkan subproses di beberapa utas
secara bersamaan sekarang thread-safe.
· Metode SPLICE Tie::Array rusak.
· Izinkan string read-only di sisi kiri tr// yang tidak dimodifikasi/.
· Jika "STDERR" terikat, peringatan yang disebabkan oleh "peringatkan" dan "mati" sekarang diteruskan dengan benar.
· Beberapa perbaikan Unicode.
· BOM (tanda urutan byte) di awal file Perl (skrip, modul)
sekarang harus dilewati secara transparan. File Perl yang disandikan UTF-16 dan UCS-2
sekarang harus dibaca dengan benar.
· Tabel karakter telah diperbarui ke Unicode 3.2.0.
· Membandingkan dengan data utf8 tidak secara ajaib meningkatkan data non-utf8 menjadi utf8.
(Ini adalah masalah misalnya jika Anda mencampur data dari I/O dan Unicode
data: output Anda mungkin telah dikodekan secara ajaib sebagai UTF-8.)
· Menghasilkan poin kode Unicode ilegal seperti U+FFFE, atau UTF-16
pengganti, sekarang juga menghasilkan peringatan opsional.
· "IsAlnum", "IsAlpha", dan "IsWord" sekarang cocok dengan titlecase.
· Penggabungan dengan "." operator atau melalui interpolasi variabel, "eq",
"substr", "mundur", "quotemeta", operator "x", substitusi dengan "s///",
UTF-8 yang dikutip tunggal, sekarang seharusnya berfungsi.
· Operator "tr///" sekarang berfungsi. Perhatikan bahwa fungsi "tr///CU" memiliki
telah dihapus (tetapi lihat paket('U0', ...)).
· "eval "v200"" sekarang berfungsi.
· Perl 5.6.0 mengurai m/\x{ab}/ salah, yang mengarah ke peringatan palsu. Ini
telah diperbaiki. [561]
· Nol entri hilang dari kelas Unicode seperti "IsDigit".
· Nomor unsigned besar (yang di atas 2**31) kadang-kadang bisa kehilangan unsigned mereka,
menyebabkan hasil palsu dalam operasi aritmatika. [561]
· Pengurai Perl telah diuji stres menggunakan input acak dan input rantai Markov
dan beberapa kerusakan dan penguncian yang ditemukan telah diperbaiki.
Platform Spesifik Perubahan dan Perbaikan
· BSDI 4.*
Perl sekarang berfungsi pada BSD/OS pasca-4.0.
· Semua BSD
Pengaturan $0 sekarang berfungsi (sebanyak mungkin; lihat perlvar untuk detailnya).
· Cygwin
Banyak pembaruan; saat ini disinkronkan dengan Cygwin 1.3.10.
· Sebelumnya DYNIX/ptx memiliki masalah dalam Configure probe untuk non-blocking I/O.
· EPOC
EPOC sekarang didukung dengan lebih baik. Lihat README.epoc. [561]
· GratisBSD 3.*
Perl sekarang bekerja pada FreeBSD pasca-3.0.
· HP-UX
README.hpux diperbarui; "Konfigurasi -Duse64bitall" sekarang berfungsi; sekarang menggunakan HP-UX malloc
bukannya Perl malloc.
· IRIX
Banyak flag kompilasi dan peningkatan petunjuk; pencampuran tidak disengaja dari 32-bit dan
Pustaka 64-bit (usaha yang gagal) menjadi jauh lebih sulit.
·Linux
· Ganda panjang sekarang harus bekerja (lihat INSTALL). [561]
· Linux sebelumnya memiliki masalah terkait sockaddrlen saat menggunakan menerima(),
diterima dari() (dalam Perl: recv ()), dapatkan nama rekan(), dan getockname().
· Mac OS Klasik
Kompilasi distribusi Perl standar di Mac OS Classic sekarang akan berfungsi jika Anda
memiliki lingkungan pengembangan Metrowerks dan bit toolkit khusus Mac yang hilang.
Hubungi milis macperl untuk detailnya.
· MPE/iX
Pembaruan MPE/iX setelah Perl 5.6.0. Lihat README.mpeix. [561]
· NetBSD/utas: coba instal GNU pth (harus ada di koleksi paket, atau
http://www.gnu.org/software/pth/), dan Konfigurasi dengan -Duseithreads.
· NetBSD/sparc
Perl sekarang bekerja di NetBSD/sparc.
· OS/2
Sekarang bekerja dengan usethreads (lihat INSTALL). [561]
· Solaris
64-bitness menggunakan kompiler Sun Workshop sekarang berfungsi.
· Stratus VOS
Metode build asli membutuhkan setidaknya VOS Rilis 14.5.0 dan GNU C++/GNU Tools
2.0.1 atau lebih baru. Fungsi paket Perl sekarang memetakan nilai yang meluap ke +infinity dan
nilai underflow ke -infinity.
· Tru64 (alias Digital UNIX, alias DEC OSF/1)
Huruf versi sistem operasi sekarang direkam di $Config{osvers}. Izinkan kompilasi
dengan gcc (sebelumnya secara eksplisit dilarang). Mengkompilasi dengan gcc masih tidak disarankan
karena hasil kode buggy, bahkan dengan gcc 2.95.2.
· Unico
Memperbaiki berbagai masalah penyelarasan yang mengarah ke pembuangan inti baik selama pembuatan atau
nanti; tidak lagi mati karena kesalahan matematika saat runtime; sekarang menggunakan bilangan bulat quad penuh (64
bit), sebelumnya hanya menggunakan bilangan bulat 46 bit untuk kecepatan.
· VMS
Lihat "Socket Extension Dynamic di VMS" dan "Default Floating Point format IEEE di
OpenVMS Alpha" untuk perubahan penting yang tidak tercantum di sini.
chdir() sekarang bekerja lebih baik meskipun ada bug CRT; sekarang bekerja dengan MULTIPLICITY (lihat INSTALL);
sekarang bekerja dengan malloc Perl.
Penodaan elemen %ENV melalui "kunci" atau "nilai" sebelumnya tidak diterapkan. Dia
sekarang berfungsi seperti yang didokumentasikan.
Emulasi "waitpid" telah ditingkatkan. Bug terburuk (sekarang diperbaiki) adalah pid
dari -1 akan menyebabkan pencarian wildcard dari semua proses pada sistem.
Sinyal gaya POSIX sekarang diemulasi jauh lebih baik pada versi VMS sebelum 7.0.
Fungsi "sistem" dan operator backticks telah meningkatkan fungsionalitas dan lebih baik
penanganan kesalahan. [561]
Tes akses file sekarang menggunakan hak proses saat ini daripada default pengguna
hak istimewa, yang terkadang dapat mengakibatkan ketidakcocokan antara akses yang dilaporkan dan
akses yang sebenarnya. Peningkatan ini hanya tersedia pada VMS v6.0 dan yang lebih baru.
Ada implementasi "bunuh" baru berdasarkan "sys$sigprc" yang memungkinkan VMS yang lebih lama
sistem (pra-7.0) untuk menggunakan "bunuh" untuk mengirim sinyal daripada hanya memaksa keluar. Ini
implementasi juga memungkinkan sistem selanjutnya untuk memanggil "kill" dari dalam penangan sinyal.
Terjemahan nama logis berulang sekarang dibatasi hingga 10 iterasi untuk meniru
TAMPILKAN LOGIS dan fasilitas OpenVMS lainnya.
· Jendela
· Penanganan sinyal sekarang bekerja lebih baik dari sebelumnya. Sekarang diimplementasikan menggunakan
loop pesan Windows, dan karena itu kurang rentan terhadap crash acak.
· garpu() emulasi sekarang lebih kuat, tetapi masih terus memiliki beberapa
bug esoteris dan peringatan. Lihat perlfork untuk detailnya. [561+]
· Garpu (semu) yang gagal sekarang mengembalikan undef dan menyetel errno ke EAGAIN. [561]
· Modul berikut sekarang berfungsi di Windows:
ExtUtils::Sematkan [561]
IO::Pipa
IO :: Jajak Pendapat
Bersih::Ping
· IO::File::new_tmpfile() tidak lagi terbatas pada 32767 pemanggilan per proses.
· Lebih baik chdir() mengembalikan nilai untuk direktori yang tidak ada.
· Kompilasi perl menggunakan alat SDK Platform 64-bit sekarang didukung.
· Itu Win32::SetChildShowWindow() builtin dapat digunakan untuk mengontrol visibilitas
jendela yang dibuat oleh proses anak. Lihat Win32 untuk detailnya.
· Penantian non-pemblokiran untuk proses anak (atau proses semu) didukung melalui
"waitpid($pid, &POSIX::WNOHANG)".
· Perilaku sistem() dengan beberapa argumen telah dirasionalisasi. Setiap
argumen yang tidak dikutip akan dikutip secara otomatis untuk melindungi spasi, dan setiap
spasi putih yang ada dalam argumen akan dipertahankan. Ini meningkatkan
portabilitas sistem (@args) dengan menghindari kebutuhan untuk shell "cmd" Windows
kutipan khusus dalam program perl.
Perhatikan bahwa ini berarti bahwa beberapa skrip yang mungkin mengandalkan buggy sebelumnya
perilaku mungkin tidak lagi berfungsi dengan benar. Misalnya, "sistem("nmake /nologo",
@args)" sekarang akan mencoba menjalankan file "nmake /nologo" dan akan gagal ketika
file seperti itu tidak ditemukan. Di sisi lain, Perl sekarang akan mengeksekusi kode seperti
sebagai "system("c:/Program Files/MyApp/foo.exe", @args)" dengan benar.
· File header perl tidak lagi menyembunyikan peringatan umum dari Microsoft
Kompiler Visual C++. Ini berarti bahwa peringatan tambahan sekarang mungkin muncul ketika
kompilasi kode XS.
· Borland C++ v5.5 sekarang menjadi kompiler yang didukung yang dapat membangun Perl. Namun,
binari yang dihasilkan terus tidak sesuai dengan yang dihasilkan oleh
compiler lain yang didukung (GCC dan Visual C++). [561]
· Menangani soket pemalsuan dengan open(F, ">&MYSOCK") sekarang berfungsi di bawah Windows 9x.
[561]
· Entri direktori saat ini di %ENV sekarang disebarkan dengan benar ke anak
proses. [561]
· Entri %ENV baru sekarang menyebar ke subproses. [561]
· Win32::GetCwd() mengembalikan C:\ alih-alih C: dengan benar saat berada di root drive.
Bug lainnya di chdir() dan Cwd::cwd() juga telah diperbaiki. [561]
· Makefile sekarang default ke fitur yang diaktifkan di ActiveState ActivePerl (a
distribusi biner Win32 yang populer). [561]
· File HTML sekarang akan diinstal di c:\perl\html alih-alih
c:\perl\lib\pod\html
· Kunci REG_EXPAND_SZ sekarang diperbolehkan dalam pengaturan registri yang digunakan oleh Perl. [561]
· Bisa sekarang Kirim() dari semua utas, bukan hanya yang pertama. [561]
· ExtUtils::MakeMaker sekarang menggunakan $ENV{LIB} untuk mencari perpustakaan. [561]
· Lebih sedikit tumpukan yang dicadangkan per utas sehingga lebih banyak utas dapat berjalan secara bersamaan.
(Masih 16 juta per utas.) [561]
· "File::Spec->tmpdir()" sekarang lebih memilih C:/temp daripada / Tmp (bekerja lebih baik ketika perl
sedang berjalan sebagai layanan).
· Penanganan jalur UNC yang lebih baik di bawah utas. [561]
· tunggu(), tunggu(), dan backticks sekarang mengembalikan status keluar yang benar di bawah
Jendela 9x. [561]
· Pegangan soket bocor masuk menerima() telah diperbaiki. [561]
New or Berubah Diagnostik
Silakan lihat perldiag untuk lebih jelasnya.
· Rentang ambigu dalam operator transliterasi (seperti az-9) sekarang memberikan peringatan.
· chdir("") dan chdir(undef) sekarang memberikan peringatan penghentian karena menyebabkan a
kemungkinan chdir yang tidak disengaja ke direktori home. Mengatakan chdir() jika Anda benar-benar bermaksud
bahwa.
· Dua opsi debugging baru telah ditambahkan: jika Anda telah mengkompilasi Perl Anda dengan
debugging, Anda dapat menggunakan opsi -DT [561] dan -DR untuk melacak tokenising dan untuk menambahkan
referensi penting untuk menampilkan variabel, masing-masing.
· Kategori peringatan leksikal "usang" tidak lagi menjadi sub-kategori dari "sintaks"
kategori. Sekarang kategori tingkat atas dalam dirinya sendiri.
· Tanpa hiasan membuang() sekarang akan memberikan peringatan yang menyarankan untuk menggunakan eksplisit INTI::buang() if
itulah yang sebenarnya dimaksud.
· Peringatan "Unrecognized escape" telah diperluas untuk menyertakan "\8", "\9", dan "\_".
Tidak perlu keluar dari salah satu karakter "\w".
· Semua pesan kesalahan kompilasi ekspresi reguler sekarang semoga lebih mudah untuk
pahami keduanya karena pesan kesalahan sekarang muncul sebelum regex yang gagal dan
karena titik kegagalan sekarang ditandai dengan jelas oleh penanda "<-- HERE".
· Berbagai fungsi I/O (dan soket) seperti mode bin(), Menutup(), dan sebagainya sekarang lebih
secara konsisten memperingatkan jika mereka digunakan secara tidak logis baik pada yang belum dibuka atau di
filehandle (atau socket) sudah ditutup.
· Menggunakan lstat () pada filehandle sekarang memberikan peringatan. (Ini adalah hal yang tidak masuk akal untuk dilakukan.)
· Opsi "-M" dan "-m" sekarang memperingatkan jika Anda tidak memberikan nama modul.
· Jika Anda "menggunakan" menentukan versi minimum yang diperlukan, modul yang cocok dengan nama dan tetapi
tidak mendefinisikan $VERSION akan menyebabkan kegagalan fatal.
· Menggunakan offset negatif untuk vektor() dalam konteks nilai sekarang menjadi pelanggaran warnable.
· Jumlah argumen ganjil untuk overload::constant sekarang memunculkan peringatan.
· Jumlah elemen ganjil dalam hash anonim sekarang memunculkan peringatan.
· Berbagai peringatan "dibuka hanya untuk", "saat ditutup", "tidak pernah dibuka" menghapus "utama::"
awalan untuk penanganan file dalam paket "utama", misalnya "STDIN" alih-alih
"utama::STDIN".
· Prototipe subrutin sekarang diperiksa lebih hati-hati, Anda mungkin mendapatkan peringatan misalnya
jika Anda telah menggunakan karakter non-prototipe.
· Jika upaya untuk menggunakan referensi (tidak diberkati) sebagai indeks array dilakukan, peringatannya adalah
diberikan.
· "dorong @a;" dan "unshift @a;" (tanpa nilai untuk Push atau unshift) sekarang berikan peringatan.
Ini mungkin menjadi masalah untuk kode yang dihasilkan dan dievaluasi.
· Jika Anda mencoba untuk "mengemas" dalam perlfunc angka kurang dari 0 atau lebih besar dari 255 menggunakan "C"
format Anda akan mendapatkan peringatan opsional. Demikian pula untuk format "c" dan angka
kurang dari -128 atau lebih dari 127.
· Format paket "P" sekarang menuntut ukuran eksplisit.
· membongkar "w" sekarang memperingatkan bilangan bulat terkompresi yang tidak dihentikan.
· Peringatan terkait penggunaan PerlIO telah ditambahkan.
· Pengubah regex tertentu seperti "(?o)" masuk akal hanya jika diterapkan ke seluruh regex.
Anda akan mendapatkan peringatan opsional jika Anda mencoba melakukan sebaliknya.
· Tampilan panjang variabel di belakang belum diimplementasikan, mencoba menggunakannya akan memberi tahu
bahwa.
· Menggunakan array atau hash sebagai referensi (misalnya "%foo->{bar}" tidak digunakan lagi untuk
ketika. Sekarang Anda akan mendapatkan peringatan opsional.
· Peringatan terkait penggunaan fitur hash terbatas baru telah ditambahkan.
· Self-ties dari array dan hash tidak didukung dan kesalahan fatal akan terjadi bahkan pada
sebuah upaya untuk melakukannya.
· Menggunakan "sort" dalam konteks skalar sekarang mengeluarkan peringatan opsional. Ini tidak berhasil
sesuatu yang berguna, karena pengurutan tidak dilakukan.
· Menggunakan pengubah /g di membagi() tidak ada artinya dan akan menimbulkan peringatan.
· Menggunakan sambatan() melewati akhir array sekarang menyebabkan peringatan.
· Pengkodean Unicode yang salah (UTF-8 dan UTF-16) menyebabkan banyak peringatan, seperti halnya mencoba
untuk menggunakan pengganti UTF-16 (yang tidak diterapkan).
· Mencoba menggunakan karakter Unicode pada aliran I/O tanpa menandai aliran
pengkodean (menggunakan Buka() or mode bin()) akan menyebabkan peringatan "Karakter lebar".
· Penggunaan v-string di use/require menyebabkan peringatan portabilitas (mundur).
· Peringatan yang berkaitan dengan penggunaan utas penerjemah dan data yang dibagikan telah
menambahkan.
Berubah Internal
· PerlIO sekarang menjadi default.
· perlapi.pod (pendamping perlguts) sekarang mencoba untuk mendokumentasikan API internal.
· Anda sekarang dapat membuat perl yang sangat minimal yang disebut microperl. Membangun microperl tidak
membutuhkan bahkan menjalankan Konfigurasi; "make -f Makefile.micro" sudah cukup. Awas:
microperl membuat banyak asumsi, beberapa di antaranya mungkin terlalu berani; yang dihasilkan
yang dapat dieksekusi mungkin macet atau berperilaku buruk dengan cara yang menakjubkan. Untuk peretas yang berhati-hati
saja.
· Ditambahkan sinyal(), yang mana(), lakukan_bergabung(), op_clear, op_null, ptr_table_clear(),
ptr_table_free(), sv_setref_uv(), dan beberapa antarmuka UTF-8 ke API yang dipublikasikan.
Untuk daftar lengkap API yang tersedia, lihat perlapi.
· Memungkinkan untuk menyebarkan pengecualian khusus melalui menggaok()ing.
· Sekarang xsubs dapat memiliki atribut seperti subs. (Yah, setidaknya built-in
atribut.)
· dTHR dan djSP telah usang; yang pertama dihapus (karena tidak ada operasi) dan
terakhir diganti dengan dSP.
· PERL_OBJECT telah dihapus sepenuhnya.
· Konstanta MAGIC (misalnya 'P') telah di-makrofi (misalnya "PERL_MAGIC_TIED") menjadi lebih baik
keterbacaan dan pemeliharaan kode sumber.
· Kompilator regex sekarang memelihara struktur yang mengidentifikasi node dalam kompilasi
bytecode dengan fitur sintaksis yang sesuai dari ekspresi regex asli.
Informasi tersebut dilampirkan ke anggota "offset" baru dari "struct regexp". Lihat
perldebguts untuk informasi lebih lengkap.
· Kode C telah dibuat lebih bersih "gcc -Wall". Beberapa pesan peringatan masih
tetap di beberapa platform, jadi jika Anda mengkompilasi dengan gcc, Anda mungkin melihat beberapa peringatan
tentang praktik yang meragukan. Peringatan sedang dikerjakan.
· perly.c, sv.c, dan sv.h sekarang telah banyak dikomentari.
· Dokumentasi tentang cara menggunakan repositori sumber Perl telah ditambahkan ke
Porting/repositori.pod.
· Sekarang ada beberapa profil yang membuat target.
Security Kerentanan Tertutup [561]
(Perubahan ini sudah dilakukan di 5.7.0 tetapi harus diulang di sini.) (5.7.0 keluar sebelumnya
5.6.1: cabang pengembangan 5.7 dirilis lebih awal dari cabang pemeliharaan 5.6)
Kerentanan keamanan potensial dalam komponen suidperl opsional Perl adalah
diidentifikasi pada Agustus 2000. suidperl tidak dibangun atau diinstal secara default. mulai dari
November 2001 satu-satunya platform rentan yang diketahui adalah Linux, kemungkinan besar semua Linux
distribusi. CERT dan berbagai vendor dan distributor telah diberitahu tentang
kerentanan. Lihat http://www.cpan.org/src/5.0/sperl-2000-08-05/sperl-2000-08-05.txt untuk
Informasi lebih lanjut
Masalahnya disebabkan oleh Perl yang mencoba melaporkan dugaan upaya eksploitasi keamanan menggunakan
program eksternal, /bin/mail. Pada platform Linux, program /bin/mail memiliki
fitur tidak berdokumen yang bila dikombinasikan dengan suidperl memberikan akses ke shell root,
menghasilkan kompromi serius alih-alih melaporkan upaya eksploitasi. Jika kamu tidak
memiliki /bin/mail, atau jika Anda memiliki 'skrip setuid yang aman', atau jika suidperl tidak diinstal, Anda
aman.
Fitur pelaporan upaya eksploitasi telah dihapus sepenuhnya dari Perl 5.8.0 (dan
rilis pemeliharaan 5.6.1, dan itu juga dihapus dari semua rilis Perl 5.7), jadi
bahwa kerentanan tertentu tidak ada lagi. Namun, keamanan lebih lanjut
kerentanan, sayangnya, selalu mungkin. Fungsi suidperl adalah yang paling
mungkin akan dihapus di Perl 5.10. Bagaimanapun, suidperl hanya boleh digunakan oleh
pakar keamanan yang tahu persis apa yang mereka lakukan dan mengapa mereka menggunakan suidperl
alih-alih beberapa solusi lain seperti Sudo ( lihat http://www.courtesan.com/sudo/ ).
New Tes
Beberapa tes baru telah ditambahkan, terutama untuk lib dan ext subbagian. Ada
sekarang sekitar 69 tes individu (tersebar di sekitar 000 skrip tes), dalam regresi
suite (5.6.1 memiliki sekitar 11 tes, dalam 700 skrip tes) Angka pastinya bergantung pada
platform dan konfigurasi Perl yang digunakan. Banyak dari tes baru tentu saja diperkenalkan oleh
modul baru, tetapi secara umum Perl sekarang lebih diuji secara menyeluruh.
Karena banyaknya pengujian, menjalankan rangkaian regresi akan memakan waktu yang lama
waktu lebih lama dari biasanya: mengharapkan suite memakan waktu hingga 4-5 kali lebih lama untuk dijalankan daripada
di perl 5.6. Pada mesin yang sangat cepat, Anda dapat berharap untuk menyelesaikan suite dalam waktu sekitar 6-8
menit (waktu jam dinding).
Tes sekarang dilaporkan dalam urutan yang berbeda dari Perls sebelumnya. (Ini terjadi
karena skrip pengujian dari bawah t/lib telah dipindahkan agar lebih dekat dengan
perpustakaan/ekstensi yang mereka uji.)
Diketahui Masalah
Penyusun Rangkaian Is Masih Sangat Eksperimental
Rangkaian kompiler perlahan menjadi lebih baik tetapi terus menjadi sangat eksperimental.
Penggunaan di lingkungan produksi tidak disarankan.
Melokalkan Terjalin Array dan Hash Is Rusak
%tied_array lokal;
tidak berfungsi seperti yang diharapkan: nilai lama tidak dikembalikan dengan benar. Ini akan menjadi
berubah di rilis mendatang, tetapi kami belum tahu seperti apa semantik baru itu.
Bagaimanapun, perubahan akan merusak kode yang ada yang bergantung pada kode saat ini (tidak jelas)
semantik, jadi hindari melakukan ini secara umum.
Bangunan Ekstensi Bisa Gagal Karena Of file besar
Beberapa ekstensi seperti mod_perl diketahui memiliki masalah dengan `file besar', perubahan yang dibawa
oleh Perl 5.6.0 di mana file offset default ke lebar 64 bit, jika didukung. Modul mungkin
gagal dikompilasi sama sekali, atau mereka mungkin mengkompilasi dan bekerja dengan tidak benar. Saat ini, tidak ada
solusi yang baik untuk masalah tersebut, tetapi Configure sekarang menyediakan non-largefile yang sesuai
ccflags, ldflags, libswanted, dan libs dalam hash %Config (mis.
$Config{ccflags_nolargefiles}) sehingga ekstensi yang mengalami masalah dapat mencoba
mengonfigurasi diri mereka sendiri tanpa file besar. Ini memang tidak bersih
solusi, dan solusinya bahkan mungkin tidak berfungsi sama sekali. Salah satu potensi kegagalan adalah apakah salah satu
dapat (atau, jika seseorang dapat, apakah itu ide yang baik untuk) menghubungkan semua binari dengan
ide yang berbeda tentang file offset; semua ini bergantung pada platform.
Memodifikasi $_ Inside untuk(..)
untuk (1..5) { $_++ }
bekerja tanpa keluhan. Seharusnya tidak. (Anda seharusnya hanya dapat memodifikasi lvalue
elemen di dalam loop.) Anda dapat melihat perilaku yang benar dengan mengganti 1 dengan
1, 2, 3, 4, 5.
mod_perl 1.26 Tidak Membangun Dengan Threaded Perl
Gunakan mod_perl 1.27 atau lebih tinggi.
lib/ftmp-keamanan tes memperingatkan 'sistem mungkin merasa tidak aman'
Jangan panik. Baca bagian 'make test' dari INSTALL sebagai gantinya.
libwww-perl (LWP) gagal dasar/tanggal #51
Gunakan libwww-perl 5.65 atau lebih baru.
PDL kegagalan beberapa tes
Gunakan PDL 2.3.4 atau lebih baru.
Perl_get_sv
Anda mungkin mendapatkan kesalahan seperti 'Simbol tidak terdefinisi "Perl_get_sv"' atau "tidak dapat menyelesaikan simbol
'Perl_get_sv'", atau simbolnya mungkin "Perl_sv_2pv". Ini mungkin berarti Anda
mencoba menggunakan perpustakaan Perl bersama yang lebih lama (atau ekstensi yang ditautkan dengan itu) dengan Perl
5.8.0 dapat dieksekusi. Perl dulu memiliki subrutin seperti itu, tetapi sekarang tidak lagi.
Periksa jalur perpustakaan bersama Anda, dan semua perpustakaan Perl bersama di direktori tersebut.
Terkadang masalah ini juga menunjukkan instalasi Perl 5.8.0 sebagian, lihat "Mac OS X
dyld undefined simbol" untuk contoh dan cara menghadapinya.
Mengikat diri sendiri Masalah
Mengikat sendiri array dan hash rusak dengan cara yang agak dalam dan sulit diperbaiki. Sebagai perhentian-
ukuran kesenjangan untuk menghindari orang dari frustrasi pada hasil misterius (core dumps,
paling sering), dilarang untuk saat ini (Anda akan mendapatkan kesalahan fatal bahkan dari upaya).
Perubahan pada self-tying globs telah menyebabkan mereka direferensikan secara rekursif (lihat: "Dua-
Pengumpulan Sampah Bertahap" di perlobj). Sekarang Anda memerlukan pelepasan eksplisit untuk menghancurkan
gumpalan yang terikat sendiri. Perilaku ini dapat diperbaiki di kemudian hari.
Pengikatan skalar dan IO sendiri berfungsi.
ext/utas/t/libc
Jika tes ini gagal, ini menunjukkan bahwa libc (perpustakaan C) Anda tidak threadsafe. Ini
tes stres tes tertentu waktu lokal() panggilan untuk mengetahui apakah itu threadsafe.
Lihat perlthrtut untuk informasi lebih lanjut.
Kegagalan of Benang (5.005-gaya) tes
Note bahwa mendukung untuk 5.005 gaya threading is usang, eksperimental dan praktis
tidak didukung. In 5.10, it is diharapkan untuk be dihapus. Kamu harus bermigrasi Tujuan kode untuk
benang merah.
Tes berikut diketahui gagal karena masalah mendasar dalam threading 5.005
penerapan. Ini bukan kegagalan baru--Perl 5.005_0x memiliki bug yang sama, tetapi tidak
memiliki tes ini.
../ext/B/t/xref.t 255 65280 14 12 85.71% 3-14
../ext/List/Util/t/first.t 255 65280 7 4 57.14% 2 5-7
../lib/English.t 2 512 54 2 3.70% 2-3
../lib/FileCache.t 5 1 20.00% 5
../lib/Filter/Simple/t/data.t 6 3 50.00% 1-3
../lib/Filter/Simple/t/filter_only. 9 3 33.33% 1-2 5
../lib/Math/BigInt/t/bare_mbf.t 1627 4 0.25% 8 11 1626-1627
../lib/Math/BigInt/t/bigfltpm.t 1629 4 0.25% 10 13 1628-
1629
../lib/Math/BigInt/t/sub_mbf.t 1633 4 0.24% 8 11 1632-1633
../lib/Math/BigInt/t/with_sub.t 1628 4 0.25% 9 12 1627-1628
../lib/Tie/File/t/31_autodefer.t 255 65280 65 32 49.23% 34-65
../lib/autouse.t 10 1 10.00% 4
op/flip.t 15 1 6.67% 15
Kegagalan ini tidak mungkin diperbaiki karena utas bergaya 5.005 dipertimbangkan
pada dasarnya rusak. (Pada dasarnya yang terjadi adalah bahwa utas yang bersaing dapat merusak
keadaan global bersama, satu contoh bagus adalah keadaan mesin ekspresi reguler.)
Pemilihan waktu masalah
Tes berikut mungkin gagal sebentar-sebentar karena masalah waktu, misalnya jika:
sistem dimuat dengan berat.
t/op/alarm.t
ext/Waktu/HiRes/HiRes.t
lib/Benchmark.t
lib/Memoize/t/expmod_t.t
lib/Memoize/t/speed.t
Jika gagal, coba jalankan secara manual, misalnya
./perl -Ilib ext/Waktu/HiRes/HiRes.t
Terikat/Ajaib Larik/Hash Elemen Do Tidak Hidupkan otomatis
Untuk array normal "$foo = \$bar[1]" akan menetapkan "undef" ke $bar[1] (dengan asumsi bahwa itu
tidak ada sebelumnya), tetapi untuk array terikat/ajaib dan hash, autovivifikasi seperti itu tidak
tidak terjadi karena saat ini tidak ada cara untuk menangkap pembuatan referensi. Sama
masalah memengaruhi pemotongan indeks/kunci yang tidak ada dari array/hash yang terikat/ajaib.
Unicode in paket/kelas dan subrutin nama tidak tidak kerja
Seseorang dapat memiliki Unicode dalam nama pengenal, tetapi tidak dalam nama paket/kelas atau subrutin.
Sementara beberapa fungsi terbatas terhadap ini memang ada pada Perl 5.8.0, itu lebih
disengaja dari yang dirancang; penggunaan Unicode untuk tujuan tersebut tidak didukung.
Salah satu alasan dari ketidaksempurnaan ini adalah (saat ini) sifat tidak dapat dibawanya yang melekat: karena keduanya
nama paket dan nama subrutin mungkin perlu dipetakan ke nama file dan direktori,
Kemampuan Unicode dari sistem file menjadi penting-- dan sayangnya tidak ada
jawaban portabel.
Platform Spesifik Masalah
AIX
· Jika menggunakan perintah make asli AIX, alih-alih hanya "membuat" masalah "make all". Di
beberapa setup yang sebelumnya diketahui palsu juga mencoba menjalankan "make install".
Atau, Anda mungkin ingin menggunakan GNU make.
· Dalam AIX 4.2, ekstensi Perl yang menggunakan fungsi C++ yang menggunakan statika mungkin mengalami masalah
bahwa statika tidak diinisialisasi. Dalam rilis AIX yang lebih baru, ini telah
diselesaikan dengan menautkan Perl dengan perpustakaan libC_r, tetapi sayangnya di AIX 4.2 dikatakan
perpustakaan memiliki bug yang tidak jelas di mana berbagai fungsi terkait dengan waktu (seperti waktu()
dan dapatkan waktu hari ini()) mengembalikan nilai yang rusak, dan oleh karena itu di AIX 4.2 Perl tidak ditautkan
terhadap libC_r.
· vac 5.0.0.0 Dapat Menghasilkan Kode Buggy Untuk Perl
Kompiler AIX C vac versi 5.0.0.0 dapat menghasilkan kode buggy, menghasilkan beberapa
tes acak gagal ketika dijalankan sebagai bagian dari "buat tes", tetapi ketika tes gagal adalah
dijalankan dengan tangan, mereka berhasil. Kami menyarankan untuk memutakhirkan ke setidaknya vac versi 5.0.1.0, yang
telah diketahui mengkompilasi Perl dengan benar. "lslpp -L|grep vac.C" akan memberi tahu Anda vac
Versi: kapan. Lihat README.aix.
· Jika membangun Perl berulir, Anda mungkin mendapatkan peringatan kompilasi dari pp_sys.c:
"pp_sys.c", baris 4651.39: 1506-280 (W) Penetapan argumen fungsi antara jenis "unsigned char*" dan "const void*" tidak diperbolehkan.
Ini tidak berbahaya; itu disebabkan oleh dapatkannetbyaddr() dan getnetbyaddr_r() memiliki
jenis yang sedikit berbeda untuk argumen pertama mereka.
alfa sistem dengan tua gccs gagal beberapa tes
Jika Anda melihat tes op/pack, op/pat, op/regexp, atau ext/Storable gagal di Linux/alpha atau
*BSD/Alpha, mungkin sudah waktunya untuk mengupgrade gcc Anda. gccs sebelum 2.95.3 pasti
tidak cukup baik, dan gcc 3.1 mungkin lebih baik. (Linux RedHat/alfa dengan gcc 3.1
melaporkan tidak ada masalah, seperti halnya Linux 2.4.18 dengan gcc 2.95.4.) (Di Tru64, lebih disukai
untuk menggunakan kompiler C yang dibundel.)
AmigaOS
Perl 5.8.0 tidak dibangun di AmigaOS. Itu rusak di beberapa titik selama utas bekerja dan
kami tidak dapat menemukan ahli Amiga untuk memecahkan masalah. Perl 5.6.1 masih berfungsi untuk
AmigaOS (seperti halnya rilis pengembangan 5.7.2).
Beos
Tes berikut gagal pada 5.8.0 Perl di BeOS Personal 5.03:
t/op/lfs.............................GAGAL pada pengujian 17
t/op/magic..........................GAGAL pada tes 24
ext/Fcntl/t/syslfs..................GAGAL pada pengujian 17
ext/File/Glob/t/basic...............GAGAL pada pengujian 3
ext/POSIX/t/sigaction............... GAGAL pada tes 13
ext/POSIX/t/waitpid..................GAGAL pada tes 1
(Catatan: informasi lebih lanjut tersedia di README.beos sampai dukungan untuk BeOS dihapus di
Perl v5.18.0)
Cygwin "tidak dapat untuk memetakan kembali"
Misalnya saat membuat ekstensi Tk untuk Cygwin, Anda mungkin mendapatkan pesan kesalahan yang mengatakan
"tidak dapat memetakan kembali". Ini adalah masalah yang diketahui dengan Cygwin, dan solusinya dirinci di
sini: http://sources.redhat.com/ml/cygwin/2001-12/msg00894.html
Cygwin ndbm tes gagal on FAT
Seseorang dapat membangun tetapi tidak menginstal (atau menguji pembuatan) NDBM_File pada sistem file FAT.
Instalasi (atau build) pada NTFS berfungsi dengan baik. Jika seseorang mencoba tes pada instalasi FAT (atau
build) kegagalan berikut diharapkan:
../ext/NDBM_File/ndbm.t 13 3328 71 59 83.10% 1-2 4 16-71
../ext/ODBM_File/odbm.t 255 65280 ?? ?? % ??
../lib/AnyDBM_File.t 2 512 12 2 16.67% 1 4
../lib/Memoize/t/errors.t 0 139 11 5 45.45% 7-11
../lib/Memoize/t/tie_ndbm.t 13 3328 4 4 100.00% 1-4
run/fresh_perl.t 97 1 1.03% 91
NDBM_File gagal dan ODBM_File hanya coredumps.
Jika Anda ingin menjalankan hanya pada FAT (atau jika menggunakan AnyDBM_File pada FAT), jalankan Configure dengan
Opsi -Ui_ndbm dan -Ui_dbm untuk mencegah NDBM_File dan ODBM_File dibangun.
DJGPP Kegagalan
t/op/stat............................GAGAL pada pengujian 29
lib/File/Find/t/find..................GAGAL pada pengujian 1
lib/File/Find/t/taint.................GAGAL pada pengujian 1
lib/h2xs............................. GAGAL pada pengujian 15
lib/Pod/t/eol........................GAGAL pada pengujian 1
lib/Test/Harness/t/strap-analyze.....GAGAL pada tes 8
lib/Test/Harness/t/test-harness ...... GAGAL di tes 23
lib/Test/Simple/t/exit...............GAGAL pada tes 1
Kegagalan di atas dikenal sebagai 5.8.0 dengan build asli dengan nama file yang panjang, tetapi ada
beberapa lagi jika dijalankan di bawah dosemu karena keterbatasan (dan mungkin bug) dari dosemu:
t/comp/cpp.................................GAGAL pada pengujian 3
t/op/inccode................................(kecelakaan)
dan beberapa tes lib/ExtUtils, dan beberapa ratus kegagalan Encode/t/Aliases.t yang berhasil
baik-baik saja dengan nama file yang panjang. Jadi, Anda mungkin lebih suka build asli dan nama file yang panjang.
FreeBSD dibangun di dengan benang merah com.coredumps bacaan besar direktori
Ini adalah bug yang dikenal di FreeBSD 4.5 bacadir_r(), telah diperbaiki di FreeBSD 4.6 (lihat
perlfreebsd (README.freebsd)).
FreeBSD Kegagalan Lokal uji 117 Untuk ISO 8859-15 Lokal
Lokal ISO 8859-15 mungkin gagal dalam tes lokal 117 di FreeBSD. Hal ini disebabkan oleh
karakter \xFF (y dengan diaeresis) dan \xBE (Y dengan diaeresis) tidak berperilaku dengan benar ketika
dicocokkan dengan case-insensitive. Rupanya masalah ini telah diperbaiki dalam versi terbaru
Rilis FreeBSD. ( http://www.freebsd.org/cgi/query-pr.cgi?pr=34308)
IRIX gagal ext/Daftar/Util/t/shuffle.t or Intisari::MD5
IRIX dengan kompiler MIPSpro 7.3.1.2m atau 7.3.1.3m mungkin gagal dalam uji List::Util
ext/List/Util/t/shuffle.t dengan membuang inti. Ini tampaknya merupakan kesalahan kompiler karena jika
dikompilasi dengan gcc tidak ada core dump yang terjadi, dan tidak ada kegagalan yang terlihat pada pengujian tersebut pada
platform lainnya.
Demikian pula, membangun ekstensi Digest::MD5 telah diketahui gagal dengan "*** Termination
kode 139 (bu21)".
Obatnya adalah dengan menurunkan tingkat pengoptimalan (Konfigurasikan -Doptimize=-O2).
HP-UX lib/posix Subtes 9 Gagal Ketika LP64-Dikonfigurasi
Jika Perl dikonfigurasi dengan -Duse64bitall, hasil subtes 10 yang berhasil
lib/posix mungkin tiba sebelum hasil subtes 9 yang berhasil, yang membingungkan
test harness sedemikian rupa sehingga menganggap subtest 9 gagal.
Linux dengan glibc 2.2.5 gagal t/op/ke subtes #6 dengan -Duse64bitint
Ini adalah bug yang dikenal di glibc 2.2.5 dengan bilangan bulat panjang yang panjang. (
http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=65612 )
Linux Dengan sfio Gagal operasi/lain-lain uji 48
Tidak ada perbaikan yang diketahui.
Mac OS X
Harap ingat untuk mengatur variabel lingkungan Anda LC_ALL ke "C" (setenv LC_ALL C) sebelumnya
menjalankan "make test" untuk menghindari banyak peringatan tentang lokal Mac OS X yang rusak.
Tes berikut diketahui gagal di Mac OS X 10.1.5 karena buggy (lama)
implementasi Berkeley DB yang disertakan dalam Mac OS X:
Gagal Uji Stat Wstat Total Gagal Daftar Gagal
-------------------------------------------------- -----------------------
../ext/DB_File/t/db-btree.t 0 11 ?? ?? % ??
../ext/DB_File/t/db-recno.t 149 3 2.01% 61 63 65
Jika Anda membangun partisi UFS, Anda mungkin juga akan melihat subtes t/op/stat.t #9
gagal. Hal ini disebabkan oleh UFS Darwin tidak mendukung waktu perubahan inode.
Juga subtes ext/POSIX/t/posix.t #10 gagal tetapi dilewati untuk saat ini karena
kegagalan adalah kesalahan Apple, bukan Perl (sinyal yang diblokir hilang).
Jika Anda Mengonfigurasi dengan ithreads, ext/threads/t/libc.t akan gagal. Sekali lagi, ini bukan milik Perl
kesalahan-- libc Mac OS X tidak threadsafe (dalam pengujian khusus ini, waktu lokal()
panggilan ternyata tidak aman.)
Mac OS X bodoh tidak terdefinisi simbol
Jika setelah menginstal Perl 5.8.0 Anda mendapatkan peringatan tentang simbol yang hilang, misalnya
dyld: perl Simbol tidak terdefinisi
_perl_sv_2pv
_perl_get_sv
Anda mungkin memiliki instalasi pra-Perl-5.8.0 lama (atau bagian darinya) di /Library/Perl
(simbol yang tidak ditentukan dulu ada di pra-5.8.0 Perls). Tampaknya untuk beberapa alasan
"make install" tidak selalu sepenuhnya menimpa file di /Library/Perl. Kamu bisa
pindahkan perpustakaan bersama Perl yang lama seperti ini:
cd /Perpustakaan/Perl/darwin/CORE
mv libperl.dylib libperlold.dylib
dan kemudian terbitkan ulang "make install". Perhatikan bahwa hal di atas tentu saja sangat mengganggu
untuk apa pun yang menggunakan /usr/local/bin/Perl. Jika itu tidak membantu, Anda mungkin harus mencoba
menghapus semua file .bundle dari bawah /Library/Perl, dan sekali lagi "make install"-ing.
OS / 2 uji Kegagalan
Tes berikut diketahui gagal pada OS/2 (untuk kejelasan hanya kegagalan yang ditampilkan,
bukan pesan kesalahan lengkap):
../lib/ExtUtils/t/Mkbootstrap.t 1 256 18 1 5.56% 8
../lib/ExtUtils/t/Packlist.t 1 256 34 1 2.94% 17
../lib/ExtUtils/t/basic.t 1 256 17 1 5.88% 14
lib/os2_process.t 2 512 227 2 0.88% 174 209
lib/os2_process_kid.t 227 2 0.88% 174 209
lib/rx_cmprt.t 255 65280 18 3 16.67% 16-18
op/sprintf tes 91, 129, dan 130
Tes op/sprintf 91, 129, dan 130 diketahui gagal pada beberapa platform. Contoh
sertakan platform apa pun yang menggunakan sfio, dan NonStop-UX Compaq/Tandem.
Tes 91 diketahui gagal pada QNX6 (nto), karena "sprintf '%e',0" salah menghasilkan
0.000000e+0 bukannya 0.000000e+00.
Untuk pengujian 129 dan 130, platform yang gagal tidak memenuhi Standar ANSI C: lines
19ff di halaman 134 dari ANSI X3.159 1989, tepatnya. (Mereka menghasilkan sesuatu selain "1"
dan "-1" saat memformat 0.6 dan -0.6 menggunakan format printf "%.0f"; paling sering, mereka
menghasilkan "0" dan "-0".)
SCO
Tes socketpair diketahui tidak memuaskan di SCO 3.2v5.0.4:
ext/Socket/socketpair.t...............Ujian GAGAL 15-45
Solaris 2.5
Jika Anda masih menggunakan Solaris 2.5 (alias SunOS 5.5), Anda mungkin mengalami kegagalan (
uji core dumping) di lib/locale.t. Obat yang disarankan adalah untuk meningkatkan Solaris Anda.
Solaris x86 Gagal Tes Dengan -Duse64bitint
Tes berikut diketahui gagal di Solaris x86 dengan Perl dikonfigurasi untuk menggunakan 64 bit:
bilangan bulat:
ext/Data/Dumper/t/dumper..............GAGAL pada pengujian 268
ext/Devel/Peek/Peek..................GAGAL pada pengujian 7
SUPER-UX (NEC SX)
Tes berikut diketahui gagal pada SUPER-UX:
op/64bitint...........................Ujian GAGAL 29-30, 32-33, 35-36
op/arith............................. tes GAGAL 128-130
op/pack ............................... tes GAGAL 25-5625
op/pow..................................
op/taint..................# msgsnd gagal
../ext/IO/lib/IO/t/io_poll............. GAGAL tes 3-4
../ext/IPC/SysV/ipcsysv...............Ujian GAGAL 2, 5-6
../ext/IPC/SysV/t/msg.................Ujian GAGAL 2, 4-6
../ext/Socket/socketpair..............ujian GAGAL 12
../lib/IPC/SysV.......................ujian GAGAL 2, 5-6
../lib/warnings.........................pengujian GAGAL 115-116, 118-119
Kegagalan op/pack ("Tidak dapat memampatkan angka negatif pada op/pack.t baris 126") serius
tapi sampai sekarang belum terpecahkan. Ini menunjukkan beberapa masalah dengan penanganan penandatanganan C
compiler, seperti halnya kegagalan 64bitint, arith, dan pow. Sebagian besar titik istirahat pada masalah
dengan SysV IPC.
Istilah::ReadKey tidak kerja on Win32
Gunakan Term::ReadKey 2.20 atau lebih baru.
UNICOS/mk
· Selama Konfigurasi, tes
Menebak simbol mana yang ditentukan oleh kompiler C dan preprosesor Anda...
mungkin akan gagal dengan pesan kesalahan seperti
CC-20 cc: File ERROR = try.c, Baris = 3
Pengidentifikasi "buruk" tidak ditentukan.
saklar rusak yylook 79 saklar rusak yylook 79 saklar rusak yylook 79 saklar rusak yylook 79#ifdef A29K
^
CC-65 cc: File ERROR = try.c, Baris = 3
Titik koma diharapkan pada titik ini.
Ini disebabkan oleh bug di utilitas awk UNICOS/mk. Anda dapat mengabaikan kesalahan,
tetapi itu menyebabkan sedikit masalah: Anda tidak dapat sepenuhnya memanfaatkan utilitas h2ph
(lihat h2ph) yang dapat digunakan untuk mengonversi header C ke perpustakaan Perl, terutama dulu
dapat mengakses dari Perl konstanta yang ditentukan menggunakan C preprocessor, cpp. Karena
kesalahan di atas, bagian dari header yang dikonversi tidak akan terlihat. Untungnya, ini
hari kebutuhan untuk h2ph jarang.
· Jika membangun Perl dengan utas penerjemah (ithreads), the dapatkan hasil(), dapatkan nama(), dan
getgrgid() fungsi tidak dapat mengembalikan daftar anggota grup karena bug di
dukungan multithreaded UNICOS/mk. Apa artinya ini adalah bahwa dalam konteks daftar
fungsi hanya akan mengembalikan tiga nilai, bukan empat.
UTS
Ada beberapa kegagalan tes yang diketahui. (Catatan: informasi yang relevan tersedia di
README.uts sampai dukungan untuk UTS dihapus di Perl v5.18.0)
VOS (Status)
Ketika Perl dibangun menggunakan proses pembuatan asli pada VOS Rilis 14.5.0 dan GNU C++/GNU
Alat 2.0.1, semua pengujian yang dicoba lulus atau menghasilkan kegagalan TODO (diabaikan).
VMS
Seharusnya tidak ada kegagalan pengujian yang dilaporkan dengan konfigurasi default, meskipun ada:
jumlah tes yang ditandai TODO yang mengarah ke area yang membutuhkan debugging dan/atau porting lebih lanjut
kerja.
Win32
Dalam kotak multi-CPU, ada beberapa masalah dengan buffering I/O: beberapa keluaran mungkin muncul
dua kali.
XML::Pengurai tidak kerja
Gunakan XML::Parser 2.31 atau yang lebih baru.
z/OS (OS/390)
z/OS memiliki lebih banyak kegagalan pengujian tetapi situasinya sebenarnya jauh lebih baik daripada sebelumnya
di 5.6.0; hanya saja begitu banyak modul dan tes baru telah ditambahkan.
Gagal Uji Stat Wstat Total Gagal Daftar Gagal
-------------------------------------------------- -------------------------
../ext/Data/Dumper/t/dumper.t 357 8 2.24% 311 314 325 327
331 333 337 339
../ext/IO/lib/IO/t/io_unix.t 5 4 80.00% 2-5
../ext/Storable/t/downgrade.t 12 3072 169 12 7.10% 14-15 46-47 78-79
110-111 150 161
../lib/ExtUtils/t/Constant.t 121 30976 48 48 100.00% 1-48
../lib/ExtUtils/t/Embed.t 9 9 100.00% 1-9
op/pat.t 922 7 0.76% 665 776 785 832-
834 845
op/sprintf.t 224 3 1.34% 98 100 136
op/tr.t 97 5 5.15% 63 71-74
uni/fold.t 780 6 0.77% 61 169 196 661
710-711
Kegagalan di dumper.t dan downgrade.t adalah masalah dalam pengujian, yang ada di io_unix dan
sprintf adalah masalah di USS (soket UDP dan format printf). Tepuk, tr, dan lipat
kegagalan adalah masalah Perl asli yang disebabkan oleh EBCDIC (dan dalam kasus tepuk dan lipat,
menggabungkannya dengan Unicode). Constant dan Embed mungkin bermasalah dalam pengujian
(karena mereka menguji kemampuan Perl untuk membuat ekstensi, dan itu tampaknya berhasil
cukup baik.)
Unicode Bantuan on EBCDIC Masih Bercak
Meskipun sebagian besar berfungsi, dukungan Unicode masih memiliki titik masalah pada platform EBCDIC. Satu
tempat yang diketahui seperti itu adalah konstruksi ekspresi reguler "\p{}" dan "\P{}" untuk titik kode
kurang dari 256: "pP" sedang menguji poin kode Unicode, tidak mengetahui tentang EBCDIC.
Terlihat In Perl 5.7 Tapi Mati Sekarang
"Waktu::Potongan" (sebelumnya dikenal sebagai "Waktu::Objek") dihapus karena dianggap
tidak memiliki nilai yang cukup di dalamnya untuk menjadi modul inti. Ini masih merupakan modul yang berguna, meskipun,
dan tersedia dari CPAN.
Sayangnya Perl 5.8 tidak lagi dibangun di AmigaOS; ini pecah secara tidak sengaja di beberapa
titik. Karena tidak banyak pengembang Amiga yang tersedia, kami tidak bisa mendapatkan ini
diperbaiki dan diuji tepat waktu untuk 5.8.0. Perl 5.6.1 masih berfungsi untuk AmigaOS (seperti halnya 5.7.2
rilis pengembangan).
"PerlIO::Scalar" dan "PerlIO::Via" (dalam huruf besar) diganti namanya menjadi "PerlIO::scalar" dan
"PerlIO::via" (semua huruf kecil) tepat sebelum 5.8.0. Alasan utamanya adalah untuk memiliki semua inti
Lapisan PerlIO memiliki semua nama huruf kecil. "Plugin" diberi nama seperti biasa, misalnya
"PerlIO::via::QuotedPrint".
"utas::shared::antrian" dan "utas::shared::semaphore" diubah namanya menjadi
"Thread::Queue" dan "Thread::Semaphore" tepat sebelum 5.8.0. Alasan utamanya adalah untuk memiliki
modul utas untuk mematuhi penamaan normal, "Utas::" ("utas" dan "utas::dibagikan"
sendiri lebih seperti pragma, mereka memengaruhi waktu kompilasi, jadi mereka tetap huruf kecil).
Pelaporan Bug
Jika Anda menemukan apa yang menurut Anda bug, Anda dapat memeriksa artikel yang baru-baru ini diposting ke
comp.lang.perl.misc newsgroup dan database bug perl di http://bugs.perl.org/ . Sana
mungkin juga informasi di http://www.perl.com/ , Halaman Beranda Perl.
Jika Anda yakin memiliki bug yang belum dilaporkan, jalankan perlbug program disertakan dengan
rilis Anda. Pastikan untuk memangkas bug Anda menjadi test case yang kecil tapi cukup. Bugmu
laporan, bersama dengan output dari "perl -V", akan dikirim ke perlbug@perl.org menjadi
dianalisis oleh tim porting Perl.
Gunakan perl58delta online menggunakan layanan onworks.net