Ini adalah perintah perl581delta 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
perl581delta - apa yang baru untuk Perl v5.8.1
DESKRIPSI
Dokumen ini menjelaskan perbedaan antara rilis 5.8.0 dan rilis 5.8.1.
Jika Anda memutakhirkan dari rilis sebelumnya seperti 5.6.1, baca dulu perl58delta,
yang menjelaskan perbedaan antara 5.6.0 dan 5.8.0.
Jika Anda bertanya-tanya tentang 5.6.1, perbaikan bug agak identik dengan
rilis pengembangan 5.7.1. Bingung? Garis waktu ini semoga sedikit membantu: ini mencantumkan
rilis utama baru, rilis pemeliharaan mereka, dan rilis pengembangan.
Pengembangan Pemeliharaan Baru
5.6.0 2000-Mar-22
5.7.0 2000-Sep-02
5.6.1 2001-April-08
5.7.1 2001-April-09
5.7.2 2001-13 Juli
5.7.3 2002-Mar-05
5.8.0 2002-18 Juli
5.8.1 2003-Sep-25
Tidak kompatibel Perubahan
Hash Pengacakan
Terutama karena alasan keamanan, "pengurutan acak" hash telah dibuat lebih banyak lagi
acak. Sebelumnya sementara urutan elemen hash dari kunci(), nilai (), dan setiap() adalah
dasarnya acak, itu masih berulang. Sekarang, bagaimanapun, urutannya bervariasi antara
menjalankan Perl yang berbeda.
Perl memiliki tak pernah terjamin Apa pun pemesanan of itu hash kunci-kunci, dan pemesanan sudah
berubah beberapa kali selama masa pakai Perl 5. Juga, urutan kunci hash telah
selalu, dan terus, dipengaruhi oleh urutan penyisipan.
Keacakan yang ditambahkan dapat memengaruhi aplikasi.
Salah satu skenario yang mungkin adalah ketika output dari aplikasi telah menyertakan data hash. Untuk
contoh, jika Anda telah menggunakan modul Data::Dumper untuk membuang data ke file yang berbeda, dan
kemudian membandingkan file untuk melihat apakah data telah berubah, sekarang Anda akan memiliki false
positif karena urutan pembuangan hash akan bervariasi. Secara umum obatnya adalah
mengurutkan kunci (atau nilainya); khususnya untuk Data::Dumper untuk menggunakan "Sortkeys"
pilihan. Jika beberapa urutan tertentu benar-benar penting, gunakan hash terikat: misalnya:
Tie::IxHash modul yang secara default mempertahankan urutan elemen hash
menambahkan.
Masalah yang lebih halus adalah ketergantungan pada tatanan "kehancuran global". Itulah yang
terjadi pada akhir eksekusi: Perl menghancurkan semua struktur data, termasuk data pengguna.
Jika destruktor Anda (subrutin HANCURKAN) telah mengasumsikan urutan tertentu ke
kehancuran global, mungkin ada masalah di depan. Misalnya, dalam destruktor satu
objek Anda tidak dapat berasumsi bahwa objek dari kelas lain mana pun masih tersedia, kecuali Anda
memegang referensi untuk mereka. Jika variabel lingkungan PERL_DESTRUCT_LEVEL diatur ke a
nilai bukan nol, atau jika Perl keluar dari utas yang muncul, itu juga akan merusak yang biasa
referensi dan tabel simbol yang tidak lagi digunakan. Anda tidak dapat memanggil metode kelas
atau fungsi biasa pada kelas yang telah dikumpulkan dengan cara itu.
Pengacakan hash pasti akan mengungkapkan asumsi tersembunyi tentang beberapa hal tertentu
pemesanan elemen hash, dan bug langsung: itu mengungkapkan beberapa bug di inti Perl dan
modul inti.
Untuk menonaktifkan pengacakan hash saat runtime, atur variabel lingkungan PERL_HASH_SEED
ke 0 (nol) sebelum menjalankan Perl (untuk informasi lebih lanjut lihat "PERL_HASH_SEED" di perlrun), atau
untuk menonaktifkan fitur sepenuhnya dalam waktu kompilasi, kompilasi dengan "-DNO_HASH_SEED" (lihat
INSTALL).
Lihat "Serangan Kompleksitas Algoritma" di perlsec untuk alasan asli di balik ini
berubah.
UTF-8 On Pegangan file Tidak Lebih lama Diaktifkan By Lokal
Di Perl 5.8.0 semua filehandle, termasuk filehandles standar, secara implisit diatur ke
berada di Unicode UTF-8 jika pengaturan lokal menunjukkan penggunaan UTF-8. Fitur ini
menyebabkan terlalu banyak masalah, sehingga fitur dimatikan dan didesain ulang: lihat "Inti
Peningkatan".
Nomor tunggal v-string adalah tidak lagi v-string sebelum "=>"
Versi string atau v-string (lihat "Versi String" di perldata) fitur diperkenalkan di
Perl 5.6.0 telah menjadi sumber kebingungan-- terutama ketika pengguna tidak ingin
menggunakannya, tetapi Perl berpikir itu lebih tahu. Terutama merepotkan adalah fitur yang
sebelum "=>" string versi ("v" diikuti oleh angka) telah ditafsirkan sebagai
v-string alih-alih string literal. Dengan kata lain:
%h = ( v65 => 42 );
berarti sejak Perl 5.6.0
%h = ( 'A' => 42 );
(setidaknya dalam platform keturunan ASCII) Perl 5.8.1 mengembalikan yang lebih alami
interpretasi
%h = ( 'v65' => 42 );
V-string multi-angka seperti v65.66 dan 65.66.67 masih terus menjadi v-string di Perl
5.8.
(Menang32) -C Beralih Memiliki Telah Digunakan kembali
Sakelar -C telah berubah dengan cara yang tidak kompatibel. Semantik lama dari sakelar ini saja
masuk akal di Win32 dan hanya di alam semesta "gunakan utf8" di rilis 5.6.x, dan tidak masuk akal
masuk akal untuk implementasi Unicode di 5.8.0. Karena sakelar ini tidak dapat digunakan
oleh siapa pun, itu telah digunakan kembali. Perilaku yang diaktifkan sakelar ini di 5.6.x
rilis mungkin didukung dengan cara yang transparan dan bergantung pada data di rilis mendatang.
Untuk kehidupan baru sakelar ini, lihat "UTF-8 tidak lagi default di bawah lokal UTF-8", dan
"-C" di perlrun.
(Menang32) /d Beralih Of cmd.exe
Perl 5.8.1 menggunakan sakelar /d saat menjalankan shell cmd.exe secara internal untuk sistem(),
backticks, dan saat membuka pipa ke program eksternal. Sakelar ekstra menonaktifkan
eksekusi perintah AutoRun dari registri, yang umumnya dianggap tidak diinginkan
saat menjalankan program eksternal. Jika Anda ingin mempertahankan kompatibilitas dengan yang lebih tua
perilaku, atur PERL5SHELL di lingkungan Anda ke "cmd /x/c".
Core tambahan
UTF-8 tidak lagi kegagalan bawah UTF-8 lokal
Di Perl 5.8.0 banyak fitur Unicode diperkenalkan. Salah satunya ditemukan lebih banyak
gangguan daripada manfaat: otomatis (dan diam) "UTF-8-ification" dari filehandles,
termasuk penanganan file standar, jika pengaturan lokal pengguna menunjukkan penggunaan UTF-8.
Misalnya, jika Anda memiliki "en_US.UTF-8" sebagai lokal Anda, STDIN dan STDOUT Anda
secara otomatis "UTF-8", dengan kata lain binmode(..., ":utf8") implisit dibuat. Ini
berarti mencoba mencetak, katakanlah, chr(0xff), akhirnya mencetak byte 0xc3 0xbf. hampir tidak
apa yang Anda pikirkan kecuali Anda mengetahui fitur Perl 5.8.0 ini. Masalahnya adalah
bahwa sebagian besar orang tidak: misalnya di RedHat rilis 8 dan 9
kegagalan pengaturan lokal adalah UTF-8, jadi semua pengguna RedHat mendapatkan filehandle UTF-8, baik mereka
menginginkannya atau tidak. Rasa sakit itu diintensifkan oleh implementasi Unicode dari Perl 5.8.0
(masih) memiliki bug jahat, terutama terkait dengan penggunaan s/// dan tr///. (Bug itu
telah diperbaiki di 5.8.1)
Oleh karena itu keputusan dibuat untuk mundur dari fitur dan mengubahnya dari silent implisit
default ke opsi sadar eksplisit. Opsi baris perintah Perl baru "-C" dan
variabel lingkungan mitra PERL_UNICODE sekarang dapat digunakan untuk mengontrol bagaimana Perl dan
Unicode berinteraksi pada antarmuka seperti I/O dan misalnya argumen baris perintah. Lihat
"-C" di perlrun dan "PERL_UNICODE" di perlrun untuk informasi lebih lanjut.
Tidak aman sinyal lagi tersedia
Di Perl 5.8.0 yang disebut "sinyal aman" diperkenalkan. Ini berarti Perl no
lagi menangani sinyal dengan segera tetapi sebagai gantinya "antara opcode", ketika aman untuk dilakukan
jadi. Penanganan segera sebelumnya dengan mudah dapat merusak keadaan internal Perl,
mengakibatkan kecelakaan misterius.
Namun, model baru yang lebih aman juga memiliki masalah. Karena sekarang opcode, unit dasar
Eksekusi Perl, tidak pernah diinterupsi melainkan dibiarkan berjalan sampai selesai, pasti
operasi yang bisa memakan waktu lama sekarang benar-benar memakan waktu lama. Misalnya, tertentu
operasi jaringan memiliki mekanisme pemblokiran dan batas waktu sendiri, dan mampu
mengganggu mereka segera akan menyenangkan.
Oleh karena itu Perl 5.8.1 memperkenalkan "pintu belakang" untuk memulihkan pra-5.8.0 (pra-5.7.3, sungguh)
perilaku sinyal. Cukup atur variabel lingkungan PERL_SIGNALS ke "tidak aman", dan yang lama
perilaku penanganan sinyal segera (dan tidak aman) kembali. Lihat "PERL_SIGNALS" di perlrun
dan "Sinyal Ditangguhkan (Sinyal Aman)" di perlipc.
Dalam berita yang sama sekali tidak terkait, Anda sekarang dapat menggunakan sinyal aman dengan POSIX::SigAction. Lihat
"POSIX::SigAction" di POSIX.
Terjalin Array dengan negatif susunan Indeks
Sebelumnya, indeks diteruskan ke metode "FETCH", "STORE", "EXISTS", dan "DELETE" dalam ikatan
kelas array selalu non-negatif. Jika argumen sebenarnya negatif, Perl akan—
panggil FETCHSIZE secara implisit dan tambahkan hasilnya ke indeks sebelum meneruskan hasilnya ke
metode array terikat. Perilaku ini sekarang opsional. Jika kelas array terikat berisi a
variabel paket bernama $NEGATIVE_INDICES yang disetel ke nilai sebenarnya, nilai negatif
akan diteruskan ke "FETCH", "STORE", "EXISTS", dan "DELETE" tidak berubah.
lokal ${$x}
Sintaksnya
${$x} lokal
lokal @{$x}
%{$x} lokal
sekarang lakukan pelokalan variabel, mengingat $x adalah nama variabel yang valid.
Unicode Karakter Basis Data 4.0.0
Salinan Basis Data Karakter Unicode yang disertakan dalam Perl 5.8 telah diperbarui ke 4.0.0
dari 3.2.0. Ini berarti misalnya bahwa properti karakter Unicode adalah seperti pada
Unikode 4.0.0.
Bantahan Peringatan
Ada satu penghentian fitur baru. Perl 5.8.0 lupa menambahkan beberapa peringatan penghentian,
peringatan ini sekarang telah ditambahkan. Akhirnya, pengingat akan penghapusan fitur yang akan datang.
(Pengingat) Pseudo-hash adalah usang (Betulkah)
Pseudo-hash tidak digunakan lagi di Perl 5.8.0 dan akan dihapus di Perl 5.10.0, lihat
perl58delta untuk detailnya. Setiap upaya untuk mengakses pseudo-hash akan memicu peringatan
"Hash semu sudah tidak digunakan lagi". Jika Anda benar-benar ingin terus menggunakan pseudo-hash tetapi
untuk tidak melihat peringatan penghentian, gunakan:
tidak ada peringatan 'usang';
Atau Anda dapat terus menggunakan pragma bidang, tetapi jangan mengharapkan struktur data
menjadi pseudohash lagi.
(Pengingat) 5.005 gaya benang adalah usang (Betulkah)
utas gaya 5.005 (diaktifkan oleh "gunakan Utas;") tidak digunakan lagi di Perl 5.8.0 dan akan
dihapus setelah Perl 5.8, lihat perl58delta untuk detailnya. Setiap pembuatan utas gaya 5.005
akan memicu peringatan "5.005 utas sudah usang". Jika Anda benar-benar ingin melanjutkan
menggunakan utas 5.005 tetapi tidak melihat peringatan penghentian, gunakan:
tidak ada peringatan 'usang';
(Pengingat) $* variabel is usang (Betulkah)
Variabel $* yang mengontrol pencocokan multi-baris tidak digunakan lagi dan akan dihapus
setelah 5.8. Variabel telah usang untuk waktu yang lama, dan peringatan penghentian
"Penggunaan $* sudah usang" diberikan, sekarang variabel akhirnya akan dihapus. NS
fungsionalitas telah digantikan oleh pengubah "/ s" dan "/ m" pada pencocokan pola. Jika
Anda benar-benar ingin terus menggunakan variabel $*-tetapi tidak melihat peringatan penghentian,
menggunakan:
tidak ada peringatan 'usang';
bermacam-macam tambahan
"peta" dalam konteks batal tidak lagi mahal. "peta" sekarang sadar konteks, dan tidak akan
buat daftar jika dipanggil dalam konteks batal.
Jika soket ditutup oleh server saat mencetaknya, klien sekarang mendapatkan SIGPIPE.
Meskipun fitur baru ini tidak direncanakan, fitur ini secara alami keluar dari perubahan PerlIO, dan akan
dianggap sebagai fitur yang tidak disengaja.
PerlIO::get_layers(FH) mengembalikan nama layer PerlIO yang aktif pada filehandle.
PerlIO::via lapisan sekarang dapat memiliki metode UTF8 opsional untuk menunjukkan apakah lapisan
ingin "auto-:utf8" aliran.
utf8::is_utf8() telah ditambahkan sebagai cara cepat untuk menguji apakah skalar dikodekan
secara internal di UTF-8 (Unicode).
Modul dan Pragmatis
Updated Modul Dan Pragmatis
Modul dan pragmata berikut telah diperbarui sejak Perl 5.8.0:
mendasarkan
B::Bytecode
Dalam kondisi yang jauh lebih baik dari sebelumnya. Masih jauh dari sempurna, tapi mungkin layak
mencoba.
B::Ringkas
B::Jauh
patokan
Sebuah fitur opsional, ":hireswallclock", sekarang memungkinkan untuk jam dinding resolusi tinggi
kali (menggunakan Waktu::HiRes).
ByteLoader
Lihat B::Bytecode.
byte
Sekarang memiliki byte::substr.
CGI
nama panggilan
Seseorang sekarang dapat memiliki alias nama karakter khusus.
CPAN
Sekarang ada frontend baris perintah sederhana ke modul CPAN.pm yang disebut cpan.
Data :: Dumper
Opsi baru, Pair, memungkinkan memilih pemisah antara kunci hash dan nilai.
DB_File
Kembangkan::PPPort
Intisari::MD5
Menyandi
Pembaruan signifikan pada fungsi pragma encoding (tr/// dan DATA
penanganan file, format).
Jika filehandle telah ditandai sebagai memiliki pengkodean, karakter yang tidak dapat dipetakan adalah:
sudah terdeteksi selama input, bukan nanti (ketika data yang rusak sedang digunakan).
Tabel konversi ISO 8859-6 telah diperbaiki (0x30x0 salah dipetakan
ke U+0660..U+0669, bukan U+0030..U+0039). Konversi GSM 03.38 tidak
menangani urutan pelarian dengan benar. Encoding UTF-7 telah ditambahkan (membuat Encode
fitur-lengkap dengan Unicode::String).
bidang
libnet
Matematika::BigInt
Banyak bug telah diperbaiki sejak v1.60, versi yang disertakan dalam Perl v5.8.0.
Terutama yang perlu diperhatikan adalah bug di Calc yang menyebabkan div dan mod gagal untuk beberapa
nilai besar, dan perbaikan penanganan input yang buruk.
Beberapa fitur baru ditambahkan, mis akar() metode, Anda sekarang dapat meneruskan parameter ke
konfigurasi() untuk mengubah beberapa pengaturan saat runtime, dan sekarang dimungkinkan untuk menjebak
penciptaan NaN dan tak terhingga.
Seperti biasa, beberapa pengoptimalan dilakukan dan membuat matematika secara keseluruhan sedikit lebih cepat. Di dalam
beberapa kasus, sebenarnya jauh lebih cepat. Terutama perpustakaan alternatif seperti
Math::BigInt::GMP mendapat manfaat dari ini. Selain itu, banyak rutinitas yang cukup kikuk
'like' fsqrt() dan mencambuk() sekarang jauh lebih cepat.
MIME::Base64
BERIKUTNYA
Warisan berlian sekarang berfungsi.
Bersih::Ping
PerlIO::skalar
Membaca dari skalar non-string (seperti variabel khusus, lihat perlvar) sekarang berfungsi.
podlator
Pod::LaTeX
PodParser
Pod::Perldoc
Tulis ulang lengkap. Sebagai efek samping, tidak lagi menolak untuk memulai saat dijalankan oleh root.
Skalar::Util
Utilitas baru: refaddr, isvstring, look_like_number, set_prototype.
Bisa disimpan
Sekarang dapat menyimpan referensi kode (melalui B::Deparse, jadi tidak mudah).
ketat
Versi pragma ketat sebelumnya tidak memeriksa parameter yang dilewati secara implisit
untuk rutinitas "impor" (penggunaan) dan "tidak impor" (tidak). Ini menyebabkan idiom yang salah seperti
sebagai:
gunakan qw(@ISA);
@ISA = qw(Foo);
Namun ini (mungkin) meningkatkan harapan palsu bahwa referensi ketat, vars dan
subs sedang ditegakkan (dan bahwa @ISA entah bagaimana "dideklarasikan"). Tapi referensi ketat,
vars, dan subs adalah tidak ditegakkan saat menggunakan idiom palsu ini.
Mulai dari Perl 5.8.1, di atas akan menyebabkan kesalahan yang akan dibangkitkan. Hal ini dapat menyebabkan
program yang digunakan untuk mengeksekusi tampaknya benar tanpa peringatan dan kesalahan gagal
ketika dijalankan di bawah 5.8.1. Hal ini terjadi karena
gunakan qw(@ISA);
sekarang akan gagal dengan kesalahan:
Tag 'ketat' tidak dikenal '@ISA'
Solusi untuk masalah ini adalah mengganti kode ini dengan idiom yang benar:
gunakan ketat;
gunakan vars qw(@ISA);
@ISA = qw(Foo);
Istilah::ANSIcolor
Tes::Harness
Sekarang jauh lebih pilih-pilih tentang keluaran ekstra atau hilang dari skrip pengujian.
Tes::Lainnya
Tes::Sederhana
Teks::Seimbang
Waktu::HiRes
Penggunaan tidur nano(), jika tersedia, memungkinkan pencampuran tidur subdetik dengan alarm.
benang
Beberapa perbaikan, misalnya untuk Ikuti() masalah dan kebocoran memori. Di beberapa platform
(seperti Linux) yang menggunakan glibc, jejak memori minimum dari satu utas telah
dikurangi beberapa ratus kilobyte.
utas::dibagikan
Banyak kebocoran memori telah diperbaiki.
Unicode::Susun
Unicode::Normalkan
Win32::DapatkanFolderPath
Win32::GetOSVersion
Sekarang mengembalikan informasi tambahan.
Kegunaan Perubahan
Utilitas "h2xs" sekarang menghasilkan tata letak yang lebih modern: Foo-Bar/lib/Foo/Bar.pm alih-alih
Foo/Bar/Bar.pm. Juga, tes boilerplate sekarang disebut t/Foo-Bar.t alih-alih t/1.t.
Debugger Perl (lib/perl5db.pl) sekarang telah didokumentasikan secara luas dan bug ditemukan
sementara pendokumentasian telah diperbaiki.
"perldoc" telah ditulis ulang dari awal menjadi lebih kuat dan kaya fitur.
"perlcc -B" bekerja sekarang setidaknya agak lebih baik, sementara "perlcc -c" agak lebih rusak.
(Suite kompiler Perl secara keseluruhan terus menjadi eksperimental.)
New Dokumentasi
perl573delta telah ditambahkan ke daftar perbedaan antara (sekarang cukup usang)
rilis pengembangan 5.7.2 dan 5.7.3.
perl58delta telah ditambahkan: ini adalah perldelta dari 5.8.0, merinci perbedaannya
antara 5.6.0 dan 5.8.0.
perlartistic telah ditambahkan: ini adalah Lisensi Artistik dalam format pod, membuatnya lebih mudah
untuk modul untuk merujuknya.
perlcheat telah ditambahkan: ini adalah lembar contekan Perl.
perlgpl telah ditambahkan: ini adalah GNU General Public License dalam format pod, membuatnya
lebih mudah bagi modul untuk merujuknya.
perlmacosx telah ditambahkan untuk memberi tahu tentang penginstalan dan penggunaan Perl di Mac OS X.
perlos400 telah ditambahkan untuk memberitahu tentang instalasi dan penggunaan Perl di OS/400 PASE.
perlreref telah ditambahkan: ini adalah referensi cepat ekspresi reguler.
Instalasi dan konfigurasi Perbaikan
Lokasi Perl standar Unix, /usr/bin/Perl, tidak lagi ditimpa secara default jika
ada. Perubahan ini sangat hati-hati karena begitu banyak vendor Unix yang telah menyediakan
/usr/bin/Perl, tetapi secara bersamaan banyak utilitas sistem mungkin bergantung pada versi yang tepat itu
dari Perl, jadi lebih baik tidak menimpanya.
Seseorang sekarang dapat menentukan direktori penginstalan untuk halaman manual dan HTML situs dan vendor, dan
skrip situs dan vendor. Lihat INSTALL.
Seseorang sekarang dapat menentukan direktori tujuan untuk instalasi Perl dengan menentukan:
Variabel DESTDIR untuk "make install". (Fitur ini sedikit berbeda dari
sebelumnya "Configure -Dinstallprefix=...".) Lihat INSTALL.
gcc versi 3.x memperkenalkan peringatan baru yang menyebabkan banyak noise selama Perl
kompilasi: "gcc -Ialreadyknowndirectory (peringatan: mengubah urutan pencarian)". Peringatan ini
sekarang telah dihindari oleh Konfigurasi penyiangan direktori tersebut sebelum kompilasi.
Seseorang sekarang dapat membangun subset modul inti Perl dengan menggunakan flag Configure
"-Dnoextensions=..." dan "-Donlyextensions=...", lihat INSTALL.
Khusus platform Perangkat tambahan
Di Cygwin Perl sekarang dapat dibangun dengan utas ("Konfigurasi -Duseithreads"). Ini bekerja dengan
baik Cygwin 1.3.22 dan Cygwin 1.5.3.
Dalam rilis FreeBSD yang lebih baru, kompilasi Perl 5.8.0 gagal karena mencoba menggunakan malloc.h,
yang di FreeBSD hanyalah file dummy, dan bahkan kesalahan fatal untuk dicoba digunakan. Sekarang malloc.h
tidak digunakan.
Perl sekarang dikenal untuk membangun juga di Hitachi HI-UXMPP.
Perl sekarang dikenal untuk membangun lagi di LynxOS.
Mac OS X sekarang menginstal dengan nomor versi Perl yang tertanam dalam nama direktori instalasi
untuk peningkatan yang lebih mudah dari Perl yang dikompilasi pengguna, dan direktori instalasi secara umum
lebih standar. Dengan kata lain, instalasi default tidak lagi merusak Apple-
disediakan Perl. Di sisi lain, dengan "Konfigurasi -Dprefix=/ usr"Sekarang kamu benar-benar bisa
ganti Perl yang disediakan Apple (silahkan be hati-hati).
Mac OS X sekarang membangun Perl secara statis secara default. Perubahan ini dilakukan terutama untuk lebih cepat
waktu mulai. Perl yang disediakan Apple masih terhubung dan dibagikan secara dinamis, dan Anda
dapat mengaktifkan kebersamaan untuk build Perl Anda sendiri dengan "Configure -Duseshrplib".
Perl telah di-porting ke lingkungan OS/400 PASE IBM. Cara terbaik untuk membangun Perl untuk
PASE adalah menggunakan host AIX sebagai lingkungan kompilasi silang. Lihat README.os400.
Namun opsi kompilasi silang lain telah ditambahkan: sekarang Perl dibangun di atas OpenZaurus, dan
Distribusi Linux berdasarkan Mandrake + Embedix untuk PDA Sharp Zaurus. Lihat
Lintas/README file.
Tru64 saat menggunakan gcc 3 menurunkan pengoptimalan untuk toke.c menjadi "-O2" karena raksasa
penggunaan memori dengan default "-O3".
Tru64 sekarang dapat membangun Perl dengan Berkeley DB yang lebih baru.
Membangun Perl di WinCE telah jauh ditingkatkan, lihat README.ce dan README.perlce.
Terpilih Bug Perbaikan
Penutupan, evaluasi dan leksikal
Ada banyak perbaikan di bidang subs anonim, leksikal dan penutupan. Meskipun
ini berarti Perl sekarang lebih "benar", mungkin saja beberapa kode yang ada akan
istirahat yang terjadi bergantung pada perilaku yang salah. Dalam praktiknya ini tidak mungkin kecuali
kode Anda berisi kumpulan subs, eval, dan leksikal anonim yang sangat kompleks.
Umum tetap
Jika filehandle input ditandai ":utf8" dan Perl melihat UTF-8 ilegal masuk saat melakukannya
" ", jika peringatan diaktifkan, peringatan segera diberikan - alih-alih diam
tentang hal itu dan Perl tidak senang dengan data yang rusak nanti. (Lapisan ":encoding(utf8)"
juga bekerja dengan cara yang sama.)
binmode(SOCKET, ":utf8") hanya berfungsi di sisi input, bukan di sisi output
stopkontak. Sekarang bekerja dua arah.
Untuk Perls berulir, fungsi basis data sistem tertentu seperti berangkat() dan dapatkan hasil() sekarang
menumbuhkan buffer hasil mereka secara dinamis, alih-alih gagal. Ini berarti bahwa di situs dengan
banyak pengguna dan grup fungsi tidak lagi gagal dengan hanya mengembalikan sebagian hasil.
Perl 5.8.0 secara tidak sengaja merusak kemampuan pengguna untuk menentukan sendiri
huruf besar<->pemetaan Unicode huruf kecil (seperti yang diiklankan oleh Unta). Fitur ini memiliki
telah diperbaiki dan juga didokumentasikan dengan lebih baik.
Di 5.8.0 ini
$some_unicode .= ;
tidak bekerja dengan benar tetapi malah merusak data. Ini sekarang telah diperbaiki.
Metode terikat seperti FETCH dll. sekarang dapat mengakses nilai terikat dengan aman, yaitu menghasilkan a
panggilan rekursif ke FETCH dll. Ingatlah untuk menghentikan rekursi.
Saat startup, Perl memblokir sinyal SIGFPE karena tidak banyak yang dapat dilakukan Perl.
Sebelumnya pemblokiran ini berlaku juga untuk program yang dijalankan dari dalam Perl. Sekarang
Perl mengembalikan rutinitas penanganan SIGFPE asli, apa pun itu, sebelum dijalankan
program eksternal.
Linenumbers dalam skrip Perl sekarang mungkin lebih besar dari 65536, atau 2**16. (Skrip Perl memiliki
selalu bisa lebih besar dari itu, hanya saja nomor baris untuk kesalahan yang dilaporkan
dan peringatan telah "membungkus".) Sementara skrip yang besar biasanya menunjukkan kebutuhan untuk
pikirkan kembali kode Anda sedikit, skrip Perl seperti itu memang ada, misalnya sebagai hasil dari yang dihasilkan
kode. Sekarang nomor linen bisa sampai ke 4294967296, atau 2**32.
Khusus platform tetap
Linux
· Mengatur $0 berfungsi lagi (dengan batasan tertentu yang Perl tidak dapat berbuat banyak: lihat
"$0" dalam perlvar)
HP-UX
· Pengaturan $0 sekarang berfungsi.
VMS
· Konfigurasi sekarang menguji keberadaan "poll()", dan IO::Poll sekarang menggunakan
fungsi yang disediakan vendor jika terdeteksi.
· Pelanggaran akses yang jarang terjadi pada permulaan Perl dapat terjadi jika gambar Perl dipasang
dengan hak istimewa atau jika ada pengidentifikasi dengan atribut subsistem yang ditetapkan di
daftar hak proses. Salah satu dari keadaan ini memicu kode pencemaran yang
berisi bug pointer. Aritmatika penunjuk yang salah telah diperbaiki.
· Batas panjang nilai (bukan kunci) dalam hash %ENV telah dinaikkan dari 255 byte
hingga 32640 byte (kecuali ketika pengaturan PERL_ENV_TABLES menimpa penggunaan default
nama logis untuk %ENV). Jika perlu untuk mengakses nilai panjang ini dari luar
Perl, ketahuilah bahwa mereka diimplementasikan menggunakan daftar pencarian nama logis yang menyimpan
nilai dalam potongan, masing-masing potongan 255-byte (hingga 128 di antaranya) menjadi elemen dalam
daftar pencarian. Saat melakukan pencarian di %ENV dari dalam Perl, elemen digabungkan
menjadi satu nilai. Kemampuan khusus VMS yang ada untuk mengakses elemen individual
dari daftar pencarian nama logis melalui sintaks $ENV{'foo;N'} (di mana N adalah daftar pencarian
indeks) tidak terganggu.
· Implementasi perpipaan sekarang menggunakan simbol DCL lokal daripada global untuk inter-
proses komunikasi.
· File::Find bisa menjadi bingung saat menavigasi ke direktori relatif yang namanya
bertabrakan dengan nama logis. Masalah ini telah diperbaiki dengan menambahkan direktori
sintaks ke nama jalur relatif, sehingga mencegah terjemahan nama logis.
Win32
· Kebocoran memori di garpu() emulasi telah diperbaiki.
· Nilai kembali dari ioctl() fungsi bawaan tidak sengaja rusak di 5.8.0.
Ini telah diperbaiki.
· Loop pesan internal terkadang dijalankan oleh Perl selama operasi pemblokiran
mengganggu pesan yang berada di luar Perl. Ini sering mengakibatkan pemblokiran
operasi yang berakhir sebelum waktunya atau mengembalikan hasil yang salah, ketika Perl
mengeksekusi di bawah lingkungan yang dapat menghasilkan pesan Windows. ini telah
dikoreksi.
· Pipa dan soket sekarang secara otomatis dalam mode biner.
· Bentuk empat argumen dari Pilih() tidak menyimpan $! (errno) dengan benar ketika ada
adalah kesalahan dalam panggilan yang mendasarinya. Ini sekarang sudah diperbaiki.
· Masalah "CR CR LF" telah diperbaiki, binmode(FH, ":crlf") sekarang efektif
tidak ada operasi.
New or Berubah Diagnostik
Semua peringatan yang terkait dengan mengemas() dan membongkar() dibuat lebih informatif dan konsisten.
Berubah "A benang keluar sementara %d benang adalah berlari"
Versi lama
Sebuah utas keluar saat %d utas lainnya masih berjalan
menyesatkan karena "lainnya" juga menyertakan utas yang memberikan peringatan.
Dihapus "Percobaan untuk jelas a terbatas hash"
Menghapus hash terbatas bukanlah tindakan ilegal, jadi peringatan itu telah dihapus.
New "Liar pernyataan of anonim subrutin"
Anda harus menentukan blok kode untuk "sub".
Berubah "Tidak sah jarak "%S" in transliterasi operator"
Versi lama
Rentang [] tidak valid "%s" di operator transliterasi
benar-benar salah karena tidak ada "[] rentang" di tr///.
New "Hilang kontrol tangki nama in \C"
Cukup jelas.
New "Garis baru in rata kiri string untuk %S"
Spasi padding akan muncul setelah baris baru, yang mungkin bukan yang Anda miliki
pikiran.
New "Mungkin hak lebih tinggi masalah on bitwise %c operator"
Jika Anda berpikir ini
$x & $y == 0
menguji apakah bitwise AND dari $x dan $y adalah nol, Anda akan menyukai peringatan ini.
New "Pseudo-hash adalah ditinggalkan"
Peringatan ini seharusnya sudah ada di 5.8.0, karena memang begitu.
New "Baca() on %s pegangan file %S"
Anda tidak bisa Baca() (Atau sysread()) dari filehandle tertutup atau belum dibuka.
New "5.005 benang adalah ditinggalkan"
Peringatan ini seharusnya sudah ada di 5.8.0, karena memang begitu.
New "Terikat variabel dibebaskan sementara masih in menggunakan"
Sesuatu menarik steker pada variabel terikat hidup, Perl bermain aman dengan bail out.
New "Ke%s: liar pemetaan '%S'"
Pemetaan kasus Unicode yang ditentukan pengguna ilegal telah ditentukan.
New "Menggunakan of dibebaskan nilai in pengulangan"
Sesuatu memodifikasi nilai yang diulang. Ini tidak bagus.
Berubah Internal
Berita ini penting bagi Anda hanya jika Anda menulis kode XS atau ingin tahu atau meretas
Perl internal (menggunakan Devel::Peek atau salah satu dari modul "B::" yang diperhitungkan), atau suka menjalankan Perl
dengan opsi "-D".
Contoh penyematan perlembed telah ditinjau agar tetap mutakhir dan konsisten:
misalnya, penggunaan yang benar dari PERL_SYS_INIT3() dan PERL_SYS_TERM().
Pengerjaan ulang ekstensif kode pad (kode yang bertanggung jawab untuk variabel leksikal) telah
dilakukan oleh Dave Mitchell.
Pekerjaan ekstensif pada v-string oleh John Peacock.
Cache posisi dan panjang UTF-8: untuk mempercepat penanganan skalar Unicode (UTF-8), a
cache diperkenalkan. Masalah potensial muncul jika ekstensi melewati API resmi
dan langsung memodifikasi PV dari SV: cache UTF-8 tidak dibersihkan sebagaimana mestinya.
API usang di Perl 5.8.0, seperti sv_2pv, sv_catpvn, sv_catsv, sv_setsv, lagi
tersedia.
Perl core C API tertentu seperti cxinc dan regatom tidak lagi tersedia sama sekali untuk dikodekan
di luar inti Perl dari ekstensi inti Perl. Ini disengaja. Mereka tidak pernah
seharusnya tersedia dengan nama yang lebih pendek, dan jika aplikasi Anda bergantung padanya,
Anda harus (malu dan) menghubungi perl5-porter untuk mendiskusikan API yang tepat.
Perl core C API tertentu seperti "Perl_list" tidak lagi tersedia tanpa "Perl_" mereka
awalan. Jika modul XS Anda berhenti bekerja karena beberapa fungsi tidak dapat ditemukan, di banyak
kasus perbaikan sederhana adalah menambahkan awalan "Perl_" ke fungsi dan konteks utas
"aTHX_" sebagai argumen pertama dari pemanggilan fungsi. Ini juga harus selalu
telah dilakukan: membiarkan formulir Perl_-less bocor dari inti adalah sebuah kecelakaan. Untuk
penyematan yang lebih bersih, Anda juga dapat memaksa ini untuk semua API dengan mendefinisikan pada waktu kompilasi cpp
tentukan PERL_NO_SHORT_NAMES.
Perl_save_bool() telah ditambahkan.
Objek regexp (yang dibuat dengan "qr") sekarang memiliki S-magic daripada R-magic. Ini tetap
regexps dari formulir /...(??{...;$x})/ untuk tidak lagi mengabaikan perubahan yang dilakukan pada $x. Sihir S
menghindari menjatuhkan pengoptimalan caching dan membuat (??{...}) konstruksi sangat lambat
(dan akibatnya tidak berguna). Lihat juga "Variabel Ajaib" di perlguts. Regexp::Salin tadi
terpengaruh oleh perubahan ini.
Makro debugging internal Perl debug() dan DEB() telah diubah namanya menjadi PERL_DEBUG() dan
PERL_DEB() untuk menghindari konflik namespace.
"-DL" dihapus (tes kebocoran telah rusak dan tidak didukung selama bertahun-tahun, gunakan alternatif
debugging mallocs atau alat seperti valgrind dan Purify).
Pengubah verbose "v" ditambahkan untuk "-DXv" dan "-Dsv", lihat perlrun.
New Tes
Di Perl 5.8.0 ada sekitar 69000 tes terpisah di sekitar 700 file tes, di Perl 5.8.1
ada sekitar 77000 tes terpisah di sekitar 780 file tes. Angka pastinya tergantung pada
konfigurasi Perl dan pada platform sistem operasi.
Diketahui Masalah
Pengacakan hash yang disebutkan dalam "Perubahan Tidak Kompatibel" pasti bermasalah: itu
akan membangunkan bug yang tidak aktif dan menghilangkan asumsi buruk.
Jika Anda ingin menggunakan mod_perl 2.x dengan Perl 5.8.1, Anda memerlukan mod_perl-1.99_10 atau lebih tinggi.
Versi sebelumnya dari mod_perl 2.x tidak bekerja dengan hash acak. (mod_perl 1.x
berfungsi dengan baik.) Anda juga memerlukan Apache::Test 1.04 atau lebih tinggi.
Banyak platform langka yang bekerja 100% atau cukup dekat dengannya dengan Perl 5.8.0 telah
dibiarkan sedikit tidak terawat karena pengelolanya sibuk akhir-akhir ini,
dan oleh karena itu akan ada lebih banyak kegagalan pada platform tersebut. Platform tersebut termasuk Mac
OS Classic, IBM z/OS (dan platform EBCDIC lainnya), dan NetWare. Perl yang paling umum
platform (Unix dan mirip Unix, platform Microsoft, dan VMS) memiliki pengujian yang cukup besar dan
populasi ahli bahwa mereka melakukannya dengan baik.
Terjalin hash in skalar konteks
Hash terikat saat ini tidak mengembalikan apa pun yang berguna dalam konteks skalar, misalnya ketika
digunakan sebagai tes boolean:
jika (%tied_hash) { ... }
Perilaku tidak masuk akal saat ini selalu mengembalikan false, terlepas dari apakah
hash kosong atau memiliki elemen.
Akar penyebabnya adalah tidak ada antarmuka untuk pelaksana hash terikat untuk
mengimplementasikan perilaku hash dalam konteks skalar.
Bersih::Ping 450_layanan dan 510_ping_udp kegagalan
Subtes 9 dan 18 dari lib/Net/Ping/t/450_service.t, dan subtes 2 dari
lib/Net/Ping/t/510_ping_udp.t mungkin gagal jika Anda memiliki pengaturan jaringan yang tidak biasa. Untuk
contoh dalam kasus terakhir, tes mencoba mengirim ping UDP ke alamat IP
127.0.0.1.
B::C
Backend kompiler penghasil C B::C (frontend menjadi "perlcc -c") bahkan lebih
rusak dari sebelumnya karena perubahan variabel leksikal yang luas. (Yang baik
berita adalah bahwa B::Bytecode dan ByteLoader lebih baik dari sebelumnya.)
Platform Spesifik Masalah
EBCDIC Platform
IBM z/OS dan platform EBCDIC lainnya terus bermasalah terkait dukungan Unicode.
Banyak tes Unicode dilewati ketika mereka benar-benar harus diperbaiki.
Cygwin 1.5 masalah
Di Cygwin 1.5 itu io/beri tahu dan op/sysio tes memiliki kegagalan untuk beberapa alasan yang belum diketahui.
Dalam 1.5.5 tes utas stress_cv, stress_re, dan stress_string gagal kecuali jika
variabel lingkungan PERLIO diatur ke "perlio" (yang juga membuat kegagalan io/tell menjadi
jauh).
Perl 5.8.1 membangun dan bekerja dengan baik dengan Cygwin 1.3: dengan (uname -a) "CYGWIN_NT-5.0 ...
1.3.22(0.78/3/2) 2003-03-18 09:20 i686 ..." 100% "make test" dicapai dengan
"Konfigurasikan -des -Duseithreads".
HP-UX: HP cc peringatan tentang kirim file dan jalur pengiriman
Dengan rilis kompiler HP C tertentu (misalnya B.11.11.02), Anda akan mendapatkan banyak peringatan seperti ini
(baris dibungkus agar lebih mudah dibaca):
cc: "/usr/include/sys/socket.h", baris 504: peringatan 562:
Deklarasi ulang "sendfile" dengan specifier kelas penyimpanan yang berbeda:
"sendfile" akan memiliki tautan internal.
cc: "/usr/include/sys/socket.h", baris 505: peringatan 562:
Deklarasi ulang "sendpath" dengan specifier kelas penyimpanan yang berbeda:
"sendpath" akan memiliki tautan internal.
Peringatan muncul baik selama pembuatan Perl dan selama tes lib/ExtUtils tertentu
yang memanggil kompiler C. Namun, peringatan itu tidak serius dan dapat diabaikan.
IRIX: t/uni/tr_7jis.t salah kegagalan
Tes t/uni/tr_7jis.t diketahui melaporkan kegagalan di bawah 'make test' atau test harness
dengan rilis IRIX tertentu (setidaknya IRIX 6.5 dan MIPSpro Compilers Versi 7.3.1.1m),
tetapi jika dijalankan secara manual, tes sepenuhnya lulus.
Mac OS X: tidak gunakanmymalloc
Perl malloc ("-Dusemymalloc") tidak berfungsi sama sekali di Mac OS X. Bukan itu
serius, karena malloc asli berfungsi dengan baik.
Benar64: Tidak berulir membangun dengan GNU cc (gcc)
Dalam rilis Tru64 terbaru (misalnya v5.1B atau yang lebih baru) gcc tidak dapat digunakan untuk mengkompilasi a
threaded Perl (-Duseithreads) karena sistem " " file tidak tahu tentang
gcc
Win32: buka, membaca sys, tulis sistem
Pada rilis 5.8.0, buka sistem()/sysread()/penulisan sistem() jangan bertingkah seperti dulu
5.6.1 dan sebelumnya sehubungan dengan mode "teks". Built-in ini sekarang selalu beroperasi di
mode "biner" (bahkan jika buka sistem() telah melewati bendera O_TEXT, atau jika mode bin() digunakan pada
pegangan file). Perhatikan bahwa masalah ini hanya akan membuat perbedaan untuk file disk, karena
soket dan pipa selalu dalam mode "biner" di port Windows. Seperti perilaku ini
saat ini dianggap sebagai bug, perilaku yang kompatibel dapat diperkenalkan kembali di masa mendatang
melepaskan. Sampai saat itu, penggunaan buka sistem(), sysread() dan penulisan sistem() tidak didukung untuk
operasi mode "teks".
Masa depan Arah
Hal-hal berikut mungkin terjadi di masa depan. Rilis pertama yang tersedia untuk umum memiliki
karakteristik ini akan menjadi pengembang merilis Perl 5.9.x, yang berpuncak pada Perl
5.10.0 rilis. Ini adalah tebakan terbaik kami saat ini: kami berhak untuk
memikirkan kembali.
· PerlIO akan menjadi Default. Saat ini (dalam Perl 5.8.x) perpustakaan stdio masih
digunakan jika Perl berpikir dapat menggunakan trik tertentu untuk membuat stdio go benar-benar cepat. Untuk
rilis mendatang tujuan kami adalah membuat PerlIO berjalan lebih cepat.
· Fitur baru bernama pernyataan akan tersedia. Ini berarti bahwa seseorang dapat memiliki kode
disebut pernyataan yang ditaburkan dalam kode: biasanya mereka dioptimalkan, tetapi mereka bisa
diaktifkan dengan opsi "-A".
· Operator baru "//" (ditentukan-atau) akan tersedia. Ini berarti bahwa seseorang akan dapat
Untuk mengatakan
$a // $b
alih-alih
didefinisikan $a ? $a : $b
dan
$c //= $d;
alih-alih
$c = $d kecuali didefinisikan $c;
Operator akan memiliki prioritas dan asosiatif yang sama dengan "||". Sebuah kode sumber
patch terhadap sumber Perl 5.8.1 akan tersedia di CPAN sebagai
penulis/id/H/HM/HMBRAND/dor-5.8.1.diff.
· "unpack()" akan default untuk membongkar $_.
· Berbagai teknik Copy-On-Write akan diselidiki dengan harapan dapat mempercepat Perl.
· CPANPLUS, Inline, dan Module::Build akan menjadi modul inti.
· Kemampuan untuk menulis pragma yang benar secara leksikal akan diperkenalkan.
· Pekerjaan akan dilanjutkan pada bytecompiler dan byteloader.
· v-string seperti yang ada saat ini dijadwalkan untuk ditinggalkan. Bentuk tanpa v
(1.2.3) akan menjadi "objek versi" saat digunakan dengan "menggunakan", "memerlukan", dan $VERSION.
$^V juga akan menjadi "objek versi" sehingga konstruksi printf("%vd",...) tidak akan lagi
dibutuhkan. Versi v-ful (v1.2.3) akan menjadi usang. Kesetaraan dari
string dan v-string (misalnya saat ini 5.8.0 sama dengan "\5\8\0") akan hilang.
Sana mungkin be tidak bantahan peringatan untuk v-string, meskipun: cukup sulit untuk dideteksi
ketika v-string digunakan dengan aman, dan ketika tidak.
· 5.005 Utas Akan Dihapus
· Variabel $* Akan Dihapus (sudah lama tidak digunakan lagi)
· Pseudohashes Akan Dihapus
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 [email dilindungi] menjadi
dianalisis oleh tim porting Perl. Anda dapat menelusuri dan mencari bug Perl 5 di
http://bugs.perl.org/
Gunakan perl581delta online menggunakan layanan onworks.net