Ini ialah perintah perlhack yang boleh dijalankan dalam penyedia pengehosan percuma OnWorks menggunakan salah satu daripada berbilang stesen kerja dalam talian percuma kami seperti Ubuntu Online, Fedora Online, emulator dalam talian Windows atau emulator dalam talian MAC OS.
JADUAL:
NAMA
perlhack - Bagaimana untuk menggodam Perl
DESCRIPTION
Dokumen ini menerangkan cara pembangunan Perl berfungsi. Ia termasuk butiran tentang Perl 5
Senarai e-mel Porter, repositori Perl, penjejak pepijat Perlbug, garis panduan tampalan dan
ulasan tentang falsafah pembangunan Perl.
SUPER CEPAT PATCH PANDUAN
Jika anda hanya mahu menyerahkan satu patch kecil seperti pembetulan pod, ujian untuk pepijat, komen
pembetulan, dsb., ianya mudah! Ini caranya:
· Semak repositori sumber
Sumber perl berada dalam repositori git. Anda boleh mengklon repositori dengan
arahan berikut:
% git klon git://perl5.git.perl.org/perl.git perl
· Pastikan anda mengikuti nasihat terkini
Sekiranya nasihat dalam panduan ini telah dikemas kini baru-baru ini, baca versi terkini
terus dari sumber perl:
% perldoc pod/perlhack.pod
· Buat perubahan anda
Hack, hack, hack. Perlu diingat bahawa Perl berjalan pada banyak platform yang berbeza, dengan
sistem pengendalian berbeza yang mempunyai keupayaan berbeza, sistem fail berbeza
organisasi, dan juga set watak yang berbeza. perlhacktips memberikan nasihat tentang perkara ini.
· Uji perubahan anda
Anda boleh menjalankan semua ujian dengan arahan berikut:
% ./Configure -des -Dusedevel
% membuat ujian
Teruskan menggodam sehingga ujian lulus.
· Lakukan perubahan anda
Melakukan kerja anda akan menjimatkan perubahan on Matlamat tempatan sistem:
% git commit -a -m 'Mesej komit pergi ke sini'
Pastikan mesej komit menerangkan perubahan anda dalam satu ayat. Sebagai contoh,
"Ralat ejaan dalam perlhack.pod telah diperbaiki".
· Hantar perubahan anda kepada perlbug
Langkah seterusnya ialah menyerahkan tampalan anda ke sistem tiket teras Perl melalui e-mel.
Jika perubahan anda berada dalam komit git tunggal, jalankan arahan berikut untuk menjana
tampal fail dan lampirkan pada laporan pepijat anda:
% git format-patch -1
% ./perl -Ilib utils/perlbug -p 0001-*.patch
Program perlbug akan bertanya kepada anda beberapa soalan tentang alamat e-mel anda dan
tampalan yang anda serahkan. Sebaik sahaja anda menjawabnya, ia akan menyerahkan tampalan anda melalui
e-mel.
Jika perubahan anda dalam berbilang komitmen, hasilkan fail tampalan untuk setiap satu dan
berikan mereka kepada pilihan "-p" perlbug yang dipisahkan dengan koma:
% git format-patch -3
% ./perl -Ilib utils/perlbug -p 0001-fix1.patch,0002-fix2.patch,\
> 0003-fix3.patch
Apabila digesa, pilih subjek yang meringkaskan perubahan anda.
· Terima kasih
Pengangkut barang menghargai masa yang anda luangkan untuk membantu menjadikan Perl lebih baik. Terima kasih!
· Lain kali
Pada kali seterusnya anda ingin membuat tampalan, anda perlu bermula dari perl terkini dalam a
keadaan murni. Semak anda tidak mempunyai sebarang perubahan setempat atau menambah fail dalam perl anda
daftar keluar yang anda ingin simpan, kemudian jalankan arahan ini:
% git tarik
% git reset --hard origin/blead
% git clean -dxf
pepijat PELAPORAN
Jika anda ingin melaporkan pepijat dalam Perl, anda mesti menggunakan perlbug alat baris arahan. ini
alat akan memastikan bahawa laporan pepijat anda termasuk semua sistem dan konfigurasi yang berkaitan
maklumat.
Untuk menyemak imbas pepijat dan tampung Perl sedia ada, anda boleh menggunakan antara muka web di
<http://rt.perl.org/>.
Sila semak arkib senarai perl5-porter (lihat di bawah) dan/atau penjejakan pepijat
sistem sebelum menyerahkan laporan pepijat. Selalunya, anda akan mendapati bahawa pepijat telah dilaporkan
sudah.
Anda boleh log masuk ke sistem penjejakan pepijat dan mengulas pada laporan pepijat sedia ada. Jika awak
mempunyai maklumat tambahan mengenai pepijat sedia ada, sila tambahkannya. Ini akan membantu
kuli membetulkan pepijat.
mutiara 5 PORTERS
Senarai mel perl5-porters (p5p) adalah tempat pengedaran standard Perl dikekalkan
dan dibangunkan. Orang yang mengekalkan Perl juga dirujuk sebagai "Perl 5 Porters",
"p5p" atau hanya "porter".
Arkib senarai yang boleh dicari tersedia di
<http://markmail.org/search/?q=perl5-porters>. Terdapat juga arkib di
<http://archive.develooper.com/perl5-porters@perl.org/>.
perl-perubahan mel senarai
Senarai mel perl5-changes menerima salinan setiap tampung yang diserahkan kepada
cawangan penyelenggaraan dan pembangunan repositori perl. Lihat
<http://lists.perl.org/list/perl5-changes.html> untuk maklumat langganan dan arkib.
#p5p on IRC
Ramai porter juga aktif pada saluran . Jangan ragu untuk menyertai
saluran dan tanya soalan tentang penggodaman pada teras Perl.
MENDAPAT THE mutiara SUMBER
Semua kod sumber Perl disimpan secara berpusat dalam repositori Git di perl5.git.perl.org.
Repositori mengandungi banyak semakan Perl dari Perl 1 dan seterusnya dan semua semakan daripada
Perforce, sistem kawalan versi sebelumnya.
Untuk lebih terperinci tentang menggunakan git dengan repositori Perl, sila lihat perlgit.
Baca mengakses melalui Git
Anda memerlukan salinan Git untuk komputer anda. Anda boleh mengambil salinan repositori
menggunakan protokol git:
% git klon git://perl5.git.perl.org/perl.git perl
Ini mengklon repositori dan membuat salinan tempatan dalam fail perl direktori.
Jika anda tidak boleh menggunakan protokol git atas sebab firewall, anda juga boleh mengklon melalui http,
walaupun ini lebih perlahan:
% git klon http://perl5.git.perl.org/perl.git perl
Baca mengakses melalui yang web
Anda boleh mengakses repositori melalui web. Ini membolehkan anda menyemak imbas pokok itu, lihat
komitmen baru-baru ini, langgan suapan RSS untuk perubahan, cari komitmen tertentu dan
lebih. Anda boleh mengaksesnya di <http://perl5.git.perl.org/perl.git>. Sebuah cermin daripada
repositori ditemui di .
Baca mengakses melalui rsync
Anda juga boleh memilih untuk menggunakan rsync untuk mendapatkan salinan pepohon sumber semasa untuk
cawangan bleadperl dan semua cawangan penyelenggaraan:
% rsync -avz rsync://perl5.git.perl.org/perl-current .
% rsync -avz rsync://perl5.git.perl.org/perl-5.12.x .
% rsync -avz rsync://perl5.git.perl.org/perl-5.10.x .
% rsync -avz rsync://perl5.git.perl.org/perl-5.8.x .
% rsync -avz rsync://perl5.git.perl.org/perl-5.6.x .
% rsync -avz rsync://perl5.git.perl.org/perl-5.005xx .
(Tambah pilihan "--delete" untuk mengalih keluar fail yang tinggal.)
Untuk mendapatkan senarai penuh titik penyegerakan yang tersedia:
% rsync perl5.git.perl.org::
Tulis mengakses melalui pergi
Jika anda mempunyai sedikit komit, sila lihat perlgit untuk mendapatkan butiran lanjut tentang menggunakan git.
PAKAIAN mutiara
Jika anda merancang untuk melakukan kerja yang lebih meluas daripada satu pembaikan kecil, kami menggalakkan anda melakukannya
baca dokumentasi di bawah. Ini akan membantu anda memfokuskan kerja anda dan membuat tampalan anda
lebih mudah untuk dimasukkan ke dalam sumber Perl.
Mengemukakan tompok
Jika anda mempunyai patch kecil untuk diserahkan, sila serahkan melalui perlbug. Anda juga boleh menghantar
email terus ke [e-mel dilindungi]. Sila ambil perhatian bahawa mesej yang dihantar kepada perlbug mungkin ditahan
dalam baris gilir sederhana, jadi anda tidak akan menerima balasan serta-merta.
Anda akan tahu penyerahan anda telah diproses apabila anda menerima e-mel daripada tiket kami
sistem pengesanan. E-mel ini akan memberi anda nombor tiket. Sebaik sahaja tampalan anda telah berjaya
kepada sistem pengesanan tiket, ia juga akan dihantar ke [e-mel dilindungi] senarai.
Patch disemak dan dibincangkan pada senarai p5p. Tampalan mudah dan tidak kontroversial akan
biasanya digunakan tanpa sebarang perbincangan. Apabila tampalan digunakan, tiket akan menjadi
dikemas kini dan anda akan menerima e-mel. Di samping itu, e-mel akan dihantar ke senarai p5p.
Dalam kes lain, tampung memerlukan lebih banyak kerja atau perbincangan. Itu akan berlaku pada p5p
senarai.
Anda digalakkan untuk mengambil bahagian dalam perbincangan dan menyokong tampung anda.
Kadangkala tampalan anda mungkin hilang dalam kocok. Adalah wajar untuk menghantar peringatan
e-mel ke p5p jika tiada tindakan diambil dalam tempoh sebulan. Sila ingat bahawa Perl 5
pembangun adalah semua sukarelawan, dan bersikap sopan.
Perubahan sentiasa digunakan terus ke cawangan pembangunan utama, dipanggil "blead". Beberapa
tampalan boleh dibackport ke cawangan penyelenggaraan. Jika anda rasa tampalan anda sesuai
untuk cawangan penyelenggaraan (lihat "CAWANGAN PENYELENGGARAAN" dalam perlpolicy), sila jelaskan sebabnya
apabila anda menyerahkannya.
Mendapat Matlamat tampalan diterima
Jika anda menyerahkan tampalan kod, terdapat beberapa perkara yang boleh anda lakukan untuk membantu
Perl 5 Porter menerima tampalan anda.
patch gaya
Jika anda menggunakan git untuk menyemak sumber Perl, kemudian menggunakan "git format-patch" akan menghasilkan a
tampalan dalam gaya yang sesuai untuk Perl. Perintah "format-patch" menghasilkan satu fail patch
untuk setiap komitmen yang anda buat. Jika anda lebih suka menghantar satu patch untuk semua komitmen, anda boleh
gunakan "git diff".
% git checkout blead
% git tarik
% git diff blead my-branch-name
Ini menghasilkan tampalan berdasarkan perbezaan antara blead dan cawangan semasa anda. ia adalah
penting untuk memastikan bahawa blead adalah terkini sebelum menghasilkan diff, sebab itu kami
panggil "git pull" dahulu.
Kami amat mengesyorkan anda menggunakan git jika boleh. Ia akan menjadikan hidup anda lebih mudah, dan
milik kita juga.
Walau bagaimanapun, jika anda tidak menggunakan git, anda masih boleh menghasilkan tampung yang sesuai. Anda perlukan a
salinan asli sumber Perl untuk dibezakan. Pengangkut barang lebih suka perbezaan bersatu.
Menggunakan GNU "diff", anda boleh menghasilkan perbezaan seperti ini:
% perbezaan -Npurd perl.pristine perl.mine
Pastikan anda "membuat realclean" dalam salinan Perl anda untuk mengalih keluar sebarang artifak binaan atau
anda mungkin mendapat keputusan yang mengelirukan.
komited mesej
Semasa anda membuat setiap tampalan yang anda ingin serahkan kepada teras Perl, adalah penting untuk menulis a
mesej komitmen yang baik. Ini amat penting jika penyerahan anda terdiri daripada a
siri komitmen.
Baris pertama mesej komit hendaklah penerangan ringkas tanpa noktah. Ia
hendaklah tidak lebih daripada baris subjek e-mel, 50 aksara adalah peraturan yang baik
ibu jari.
Banyak alat Git (Gitweb, GitHub, git log --pretty=oneline, ...) hanya akan memaparkan
baris pertama (dipotong pada 50 aksara) apabila membentangkan ringkasan komit.
Mesej komit harus menyertakan perihalan masalah yang dibetulkan oleh tampung atau
fungsi baharu yang ditambahkan oleh tampung.
Sebagai peraturan umum, mesej komit anda harus membantu pengaturcara yang mengetahui
Teras Perl dengan cepat memahami perkara yang anda cuba lakukan, cara anda cuba melakukannya dan
mengapa perubahan itu penting kepada Perl.
· Mengapa
Mesej komitmen anda harus menerangkan sebab perubahan yang anda lakukan itu penting. Bila
seseorang melihat perubahan anda dalam enam bulan atau enam tahun, niat anda harus jelas.
Jika anda menafikan ciri dengan tujuan untuk memudahkan lagi sedikit ciri tersebut
kod, katakan begitu. Jika anda membetulkan masalah prestasi atau menambah ciri baharu pada
sokong beberapa inti lain, sebutkan itu.
· Apa
Mesej komitmen anda harus menerangkan bahagian teras Perl yang anda ubah dan
apa yang anda harapkan patch anda lakukan.
· Bagaimana
Walaupun tidak diperlukan untuk perubahan dokumentasi, ujian baharu atau tampalan remeh, ia adalah
selalunya bernilai menerangkan cara perubahan anda berfungsi. Walaupun ia jelas kepada anda hari ini, ia mungkin
tidak jelas kepada kuli bulan depan atau tahun depan.
Mesej komit tidak bertujuan untuk menggantikan ulasan dalam kod anda. komited
mesej harus menerangkan perubahan yang anda buat, manakala komen kod harus menerangkan
keadaan semasa kod.
Jika anda baru sahaja melaksanakan ciri baharu, lengkapkan dengan dokumen, ujian dan ulasan yang baik
kod, mesej komit ringkas selalunya sudah memadai. Jika, bagaimanapun, anda baru sahaja menukar a
watak tunggal jauh dalam penghurai atau lexer, anda mungkin perlu menulis novel kecil untuk
pastikan pembaca akan datang memahami apa yang anda lakukan dan mengapa anda melakukannya.
Komen, Komen, Komen-komen
Pastikan anda mengulas kod anda dengan secukupnya. Walaupun mengulas setiap baris adalah tidak perlu,
apa-apa yang mengambil kesempatan daripada kesan sampingan pengendali, yang mencipta perubahan yang akan
dirasai di luar fungsi yang ditampal, atau yang mungkin dikelirukan oleh orang lain
didokumenkan. Jika anda akan tersilap, lebih baik tersilap menambah terlalu banyak
komen daripada terlalu sedikit.
Komen terbaik menjelaskan mengapa kod melakukan apa yang dilakukannya, bukan apa it tidak.
Style
Secara umum, sila ikut gaya tertentu kod yang anda tampal.
Khususnya, ikut garis panduan am ini untuk menampal sumber Perl:
· tab 8 lebar (tiada pengecualian!)
· Inden 4 lebar untuk kod, inden 2 lebar untuk CPP bersarang #defines
· Berusaha keras untuk tidak melebihi 79-lajur
· Prototaip ANSI C
· Uncuddled elses dan gaya "K&R" untuk membina kawalan inden
· Tiada ulasan gaya C++ (//).
· Tandai tempat yang perlu dilawati semula dengan XXX (dan lawati semula selalu!)
· Membuka garis pendakap dengan "jika" apabila bersyarat menjangkau berbilang baris; sepatutnya di
hujung talian sebaliknya
· Dalam definisi fungsi, nama bermula dalam lajur 0 (jenis nilai pulangan adalah pada sebelumnya
garis)
· Ruang tunggal selepas kata kunci yang diikuti oleh ibu bapa, tiada ruang antara fungsi
nama dan mengikut ibu bapa
· Elakkan tugasan dengan bersyarat, tetapi jika ia tidak dapat dielakkan, gunakan paren tambahan, mis.
"jika (a && (b = c)) ..."
· "kembali foo;" bukannya "return(foo);"
· "jika (!foo) ..." dan bukannya "jika (foo == SALAH) ..." dsb.
· Jangan isytiharkan pembolehubah menggunakan "daftar". Ia mungkin tidak produktif dengan moden
penyusun, dan ditamatkan dalam C++, di mana sumber Perl sentiasa digunakan
disusun.
· Fungsi dalam talian yang terdapat dalam pengepala yang boleh diakses oleh kod XS perlu boleh
untuk menyusun tanpa amaran dengan bendera kompilasi tambahan yang biasa digunakan, seperti gcc
"-Wswitch-default" yang memberi amaran apabila pernyataan suis tidak mempunyai "default"
kes. Penggunaan bendera tambahan ini adalah untuk menangkap potensi masalah dalam kod C undang-undang,
dan sering digunakan oleh pengagregat Perl, seperti pengedar Linux.
ujian suite
Jika tampalan anda menukar kod (bukan sekadar menukar dokumentasi), anda juga harus
sertakan satu atau lebih kes ujian yang menggambarkan pepijat yang anda betulkan atau mengesahkan yang baharu
fungsi yang anda tambahkan. Secara umum, anda harus mengemas kini fail ujian sedia ada
daripada membuat yang baru.
Penambahan suite ujian anda secara amnya harus mengikut garis panduan ini (ihsan Gurusamy
Sarathy[e-mel dilindungi]>):
· Ketahui perkara yang anda uji. Baca dokumen, dan sumbernya.
· Cenderung gagal, tidak berjaya.
· Mentafsir keputusan dengan tegas.
· Gunakan ciri yang tidak berkaitan (ini akan menghapuskan interaksi pelik).
· Gunakan simpulan bahasa bukan standard (jika tidak, anda tidak menguji TIMTOWTDI).
· Elakkan menggunakan nombor ujian berkod keras apabila mungkin (EXPECTED/GOT terdapat dalam
t/op/tie.t adalah lebih boleh diselenggara, dan memberikan laporan kegagalan yang lebih baik).
· Berikan mesej ralat yang bermakna apabila ujian gagal.
· Elakkan menggunakan qx// dan sistem () melainkan anda sedang menguji mereka. Jika anda menggunakannya,
pastikan anda meliputi _semua_ platform perl.
· Nyahpaut mana-mana fail sementara yang anda buat.
· Galakkan amaran yang tidak dijangka kepada ralat dengan $SIG{__WARN__}.
· Pastikan anda menggunakan perpustakaan dan modul yang dihantar dengan versi yang sedang diuji, bukan
yang telah dipasang.
· Tambahkan ulasan pada kod yang menerangkan perkara yang anda sedang uji.
· Jadikan pengemaskinian rentetan '1..42' tidak diperlukan. Atau pastikan anda mengemas kininya.
· Uji _semua_ tingkah laku pengendali, perpustakaan atau fungsi tertentu.
Uji semua hujah pilihan.
Uji nilai pulangan dalam pelbagai konteks (boolean, skalar, senarai, lnilai).
Gunakan kedua-dua pembolehubah global dan leksikal.
Jangan lupa kes patologi yang luar biasa.
Patching a teras modul
Ini berfungsi sama seperti menampal apa-apa lagi, dengan satu pertimbangan tambahan.
Modul dalam cpan/ direktori pokok sumber dikekalkan di luar teras Perl.
Apabila pengarang mengemas kini modul, kemas kini hanya disalin ke dalam teras. Lihat itu
dokumentasi modul atau penyenaraiannya pada <http://search.cpan.org/> untuk maklumat lanjut tentang
melaporkan pepijat dan menyerahkan patch.
Dalam kebanyakan kes, tampalan pada modul dalam cpan/ hendaklah dihantar ke hulu dan tidak sepatutnya
digunakan pada teras Perl secara individu. Jika tampalan pada fail masuk cpan/ sama sekali tidak boleh
tunggu pembetulan dibuat ke hulu, dikeluarkan ke CPAN dan disalin ke blead, anda mesti menambah
(atau kemas kini) entri "DISUAIKAN" dalam "Porting/Maintainers.pl" fail untuk menandakan bahawa tempatan
pengubahsuaian telah dibuat. Lihat "Porting/Maintainers.pl" untuk maklumat lanjut.
Sebaliknya, modul dalam dist / direktori dikekalkan dalam teras.
Mengemaskini perldelta
Untuk perubahan yang cukup ketara untuk menjamin a pod/perldelta.pod masuk, kuli akan
amat menghargai jika anda menghantar entri delta bersama-sama dengan perubahan sebenar anda.
Perubahan ketara termasuk, tetapi tidak terhad kepada:
· Menambah, menafikan atau mengalih keluar ciri teras
· Menambah, menafikan, mengalih keluar atau menaik taraf modul teras atau dwi hayat
· Menambah ujian teras baharu
· Membetulkan isu keselamatan dan pepijat yang boleh dilihat oleh pengguna dalam teras
· Perubahan yang mungkin memecahkan kod sedia ada, sama ada pada peringkat perl atau C
· Peningkatan prestasi yang ketara
· Menambah, mengalih keluar atau menukar dokumentasi dengan ketara dalam pod/ direktori
· Perubahan penting khusus platform
Sila pastikan anda menambah entri perldelta ke bahagian kanan dalam
pod/perldelta.pod. Maklumat lanjut tentang cara menulis entri perldelta yang baik tersedia
dalam bahagian "Gaya" pada Memindahkan/cara_menulis_a_perldelta.pod.
Servis membuat khususnya a baik tampalan?
Ciri dan sambungan baharu kepada bahasa boleh menjadi perbalahan. Tiada set khusus
kriteria yang menentukan ciri yang akan ditambah, tetapi berikut ialah beberapa soalan
pertimbangkan semasa membangunkan tampalan:
Adakah yang konsep sepadan dengan yang umum matlamat of Perl?
Matlamat kami termasuk, tetapi tidak terhad kepada:
1. Pastikan ia cepat, ringkas dan berguna.
2. Pastikan ciri/konsep sebagai ortogon yang mungkin.
3. Tiada had sewenang-wenangnya (platform, saiz data, budaya).
4. Pastikan ia terbuka dan menarik untuk digunakan/tampal/menyokong Perl di mana-mana sahaja.
5. Sama ada mengasimilasikan teknologi baharu, atau membina jambatan kepada mereka.
Lokasi is yang pelaksanaan?
Semua cakap di dunia tidak berguna tanpa pelaksanaan. Dalam hampir setiap kes, yang
orang atau orang yang berhujah untuk ciri baharu akan dijangka menjadi orang yang melaksanakan
ia. Porter yang mampu mengekodkan ciri baharu mempunyai agenda mereka sendiri dan tidak tersedia
untuk melaksanakan idea anda (mungkin baik).
Ke belakang keserasian
Ia adalah satu dosa besar untuk memecahkan program Perl yang sedia ada. Amaran baru boleh
perbalahan--ada yang mengatakan bahawa program yang mengeluarkan amaran tidak rosak, manakala yang lain berkata
ia adalah. Menambah kata kunci mempunyai potensi untuk memecahkan program, mengubah makna
urutan atau fungsi token sedia ada mungkin memecahkan program.
Teras Perl 5 termasuk mekanisme untuk membantu porter membuat perubahan yang tidak serasi ke belakang
lebih serasi seperti ciri dan modul yang tidak digunakan lagi. Sila gunakannya apabila
sesuai.
boleh it be a modul sebaliknya?
Perl 5 mempunyai mekanisme sambungan, modul dan XS, khususnya untuk mengelakkan keperluan untuk disimpan
menukar penterjemah Perl. Anda boleh menulis modul yang mengeksport fungsi, anda boleh memberi
prototaip fungsi tersebut supaya ia boleh dipanggil seperti fungsi terbina dalam, anda juga boleh
tulis kod XS untuk mengacaukan struktur data masa jalan penterjemah Perl jika anda mahu
untuk melaksanakan perkara yang benar-benar rumit.
Apabila boleh, ciri baharu hendaklah dibuat prototaip dalam modul CPAN sebelum ianya
dipertimbangkan untuk teras.
Is yang ciri generik cukup?
Adakah ini sesuatu yang hanya pengirim mahu ditambahkan pada bahasa, atau secara umum
berguna? Kadangkala, alih-alih menambah ciri dengan fokus yang ketat, porter mungkin
memutuskan untuk menunggu sehingga seseorang melaksanakan ciri yang lebih umum.
Adakah it berpotensi memperkenalkan baru pepijat?
Penulisan semula radikal bagi sebahagian besar penterjemah Perl berpotensi untuk diperkenalkan
pepijat baru.
Cara besar is ia?
Lebih kecil dan lebih disetempatkan perubahan, lebih baik. Begitu juga, satu siri kecil
tampalan amat diutamakan berbanding tampalan besar tunggal.
Adakah it menghalang lain wajar ciri-ciri?
Tampalan mungkin akan ditolak jika ia menutup jalan pembangunan masa hadapan. Untuk
contohnya, tampalan yang meletakkan tafsiran yang benar dan muktamad pada prototaip berkemungkinan
ditolak kerana masih ada pilihan untuk masa depan prototaip yang belum
ditujukan.
Is yang pelaksanaan teguh?
Tompok yang baik (kod ketat, lengkap, betul) mempunyai lebih banyak peluang untuk masuk. Sloppy atau
tompok yang salah mungkin diletakkan pada penunu belakang sehingga pengepam mempunyai masa untuk diperbaiki,
atau mungkin dibuang sama sekali tanpa notis lanjut.
Is yang pelaksanaan generik cukup kepada be mudah alih?
Tampalan terburuk menggunakan ciri khusus sistem. Sangat tidak mungkin bahawa bukan
tambahan mudah alih kepada bahasa Perl akan diterima.
Is yang pelaksanaan diuji?
Tampalan yang mengubah tingkah laku (membetulkan pepijat atau memperkenalkan ciri baharu) mesti disertakan
ujian regresi untuk mengesahkan bahawa semuanya berfungsi seperti yang diharapkan.
Tanpa ujian yang disediakan oleh pengarang asal, bagaimana orang lain boleh menukar perl dalam
masa depan pastikan bahawa mereka tidak secara tidak sengaja melanggar tingkah laku yang dilaksanakan oleh patch?
Dan tanpa ujian, bagaimana pengarang tampalan yakin bahawa kerja kerasnya dilakukan
patch itu tidak akan dibuang secara tidak sengaja oleh seseorang pada masa hadapan?
Is terdapat cukup dokumentasi?
Tampalan tanpa dokumentasi mungkin tidak difikirkan atau tidak lengkap. Tiada ciri boleh
ditambah atau diubah tanpa dokumentasi, jadi serahkan tampalan untuk pod yang sesuai
dokumen serta kod sumber adalah penting.
Is terdapat lain cara kepada do ia?
Larry berkata "Walaupun Slogan Perl adalah Ada Lagi Daripada satu Cara kepada Do It, saya teragak-agak untuk
buat 10 cara untuk melakukan sesuatu". Ini adalah heuristik yang rumit untuk dinavigasi, walaupun--seorang lelaki
tambahan yang penting adalah tongkat sia-sia lelaki lain.
Adakah it mewujudkan tinggi banyak bekerja?
Bekerja untuk mengepam, bekerja untuk pengaturcara Perl, bekerja untuk pengarang modul, ... Perl adalah
sepatutnya mudah.
Tampalan bercakap lebih kuat daripada perkataan
Kod kerja sentiasa diutamakan daripada idea pai-in-the-sky. Tampalan untuk menambah ciri berdiri
peluang yang lebih tinggi untuk mencapai bahasa daripada permintaan ciri rawak, tidak
tidak kira betapa bersungguh-sungguhnya permintaan itu. Ini berkaitan dengan "Adakah ia berguna?", sebagai
hakikat bahawa seseorang meluangkan masa untuk membuat tampalan menunjukkan keinginan yang kuat untuk
ciri.
UJIAN
Teras menggunakan gaya ujian yang sama seperti Perl yang lain, "ok/not ok" yang mudah dijalankan
Ujian::Abah-abah, tetapi terdapat beberapa pertimbangan khusus.
Terdapat tiga cara untuk menulis ujian dalam teras: Ujian:: Lagi, t/test.pl dan ad hoc "cetak
$ujian ? "ok 42\n" : "not ok 42\n"". Keputusan yang hendak digunakan bergantung pada bahagian mana
suite ujian yang anda sedang kerjakan. Ini adalah langkah untuk mengelakkan kegagalan peringkat tinggi (seperti
sebagai Config.pm breaking) daripada menyebabkan ujian kefungsian asas gagal.
. t/test.pl perpustakaan menyediakan beberapa ciri Test::More, tetapi mengelak memuatkan kebanyakan
modul dan menggunakan sesedikit mungkin ciri teras.
Jika anda menulis ujian anda sendiri, gunakan Test Anything Protocol <http://testanything.org>.
· t/asas, t/komp and t/opbasic
Memandangkan kita tidak tahu sama ada "memerlukan" berfungsi, atau pun subrutin, gunakan ujian ad hoc untuk
ketiga-tiga ini. Langkah berhati-hati untuk mengelak daripada menggunakan ciri yang diuji. Ujian dalam
t/opbasic, sebagai contoh, telah diletakkan di sana dan bukannya di dalam t/op kerana mereka menguji
kefungsian yang t/test.pl anggapan telah pun ditunjukkan untuk berfungsi.
· t/cmd, t/lari, t/io and t/op
Sekarang asas itu memerlukan() dan subrutin diuji, anda boleh menggunakan t/test.pl
perpustakaan.
Anda juga boleh menggunakan perpustakaan tertentu seperti Config secara bersyarat, tetapi pastikan anda melangkau
uji dengan anggun jika tiada.
· Semua yang lain
Kini setelah teras Perl diuji, Test::More boleh dan harus digunakan. Anda juga boleh
gunakan suite penuh modul teras dalam ujian.
Apabila anda menyebut "buat ujian", Perl menggunakan t/UJIAN program untuk menjalankan suite ujian (kecuali di bawah
Win32 di mana ia menggunakan t/abah-abah sebaliknya). Semua ujian dijalankan dari t/ direktori, tidak yang
direktori yang mengandungi ujian. Ini menyebabkan beberapa masalah dengan ujian dalam lib /, Jadi
inilah beberapa peluang untuk menampal.
Anda mesti sedar tiga kali ganda tentang kebimbangan merentas platform. Ini biasanya berpunca daripada penggunaan
Fail::Spec, mengelakkan perkara seperti "fork()" dan "system()" melainkan benar-benar perlu, dan
tidak menganggap bahawa aksara tertentu mempunyai nilai ordinal tertentu (titik kod) atau itu
perwakilan UTF-8nya terdiri daripada bait tertentu.
Terdapat beberapa fungsi yang tersedia untuk menentukan aksara dan titik kod secara mudah alih
ujian. Fungsi yang sentiasa dipramuat "utf8::unicode_to_native()" dan songsangnya
"utf8::native_to_unicode()" ambil mata kod dan terjemah dengan sewajarnya. Fail
t/charset_tools.pl mempunyai beberapa fungsi yang boleh berguna. Ia mempunyai versi
dua fungsi sebelumnya yang mengambil rentetan sebagai input -- bukan titik kod angka tunggal:
"uni_to_native()" dan "native_to_uni()". Jika anda mesti melihat bait individu
yang terdiri daripada rentetan berkod UTF-8, "byte_utf8a_to_utf8n()" mengambil sebagai input rentetan
bait tersebut yang dikodkan untuk platform ASCII, dan mengembalikan rentetan yang setara dalam natif
platform. Contohnya, "byte_utf8a_to_utf8n("\xC2\xA0")" mengembalikan jujukan bait pada
platform semasa yang membentuk UTF-8 untuk "U+00A0", kerana "\xC2\xA0" ialah UTF-8 bait pada
platform ASCII untuk titik kod tersebut. Fungsi ini mengembalikan "\xC2\xA0" pada ASCII
platform, dan "\x80\x41" pada satu EBCDIC 1047.
Tetapi yang paling mudah ialah, jika aksara itu boleh ditentukan sebagai literal, seperti "A" atau "%", untuk digunakan
bahawa; jika tidak begitu spesifik, anda boleh menggunakan use "\N{}" , jika kesan sampingannya tidak
menyusahkan. Hanya tentukan semua aksara anda dalam hex, menggunakan "\N{U+ZZ}" dan bukannya
"\xZZ". "\N{}" ialah nama Unicode, jadi ia sentiasa memberikan anda aksara Unicode.
"\N{U+41}" ialah aksara yang titik kod Unikodnya ialah 0x41, oleh itu ialah 'A' pada semua
platform. Kesan sampingannya ialah:
1) Ini memilih peraturan Unicode. Ini bermakna bahawa dalam rentetan double-quotish, rentetannya ialah
sentiasa ditukar kepada UTF-8 untuk memaksa tafsiran Unicode (anda boleh
"utf8::downgrade()" selepas itu untuk menukar kembali kepada bukan UTF8, jika boleh). Dalam biasa
corak ungkapan, penukaran tidak dilakukan, tetapi jika pengubah set aksara
sebaliknya akan menjadi "/d", ia ditukar kepada "/u".
2) Jika anda menggunakan borang "\N{watak nama}", modul charnames mendapat secara automatik
dimuatkan. Ini mungkin tidak sesuai untuk tahap ujian yang anda lakukan.
Jika anda sedang menguji tempat (lihat perllocale), terdapat fungsi pembantu dalam t/loc_tools.pl
untuk membolehkan anda melihat tempat yang terdapat pada platform semasa.
khas "buat ujian" sasaran
Terdapat pelbagai sasaran buatan khas yang boleh digunakan untuk menguji Perl sedikit berbeza
daripada sasaran "ujian" standard. Tidak semua mereka dijangka memberikan kadar kejayaan 100%.
Ramai daripada mereka mempunyai beberapa alias, dan kebanyakannya tidak tersedia pada operasi tertentu
sistem.
· test_porting
Ini menjalankan beberapa ujian kewarasan asas pada pokok sumber dan membantu menangkap ralat asas
sebelum anda menyerahkan patch.
· paling minit
Main miniperl on t/asas, t/komp, t/cmd, t/lari, t/io, t/op, t/uni and t/mro ujian.
· ujian.valgrind semak.valgrind
(Hanya dalam Linux) Jalankan semua ujian menggunakan kebocoran memori + alat akses memori nakal
"valgrind". Fail log akan dinamakan nama ujian.valgrind.
· abah-abah ujian
Jalankan suite ujian dengan t/abah-abah mengawal program, bukannya t/UJIAN.
t/abah-abah adalah lebih canggih, dan menggunakan modul Test::Harness, justeru menggunakan ini
sasaran ujian mengandaikan bahawa perl kebanyakannya berfungsi. Kelebihan utama untuk tujuan kita ialah
bahawa ia mencetak ringkasan terperinci ujian yang gagal pada penghujungnya. Juga, tidak seperti t/UJIAN, Ia
tidak mengubah hala stderr ke stdout.
Ambil perhatian bahawa di bawah Win32 t/abah-abah sentiasa digunakan bukannya t/UJIAN, jadi tidak ada
sasaran khas "test_harness".
Di bawah sasaran "ujian" Win32 anda boleh menggunakan persekitaran TEST_SWITCHES dan TEST_FILES
pembolehubah untuk mengawal tingkah laku t/abah-abah. Ini bermakna anda boleh berkata
nmake ujian TEST_FILES="op/*.t"
nmake ujian TEST_SWITCHES="-torture" TEST_FILES="op/*.t"
· test-notty test_notty
Tetapkan PERL_SKIP_TTY_TEST kepada benar sebelum menjalankan ujian biasa.
Selari ujian
Pengedaran teras kini boleh menjalankan ujian regresinya secara selari pada platform seperti Unix.
Daripada menjalankan "buat ujian", tetapkan "TEST_JOBS" dalam persekitaran anda kepada bilangan ujian
untuk berjalan secara selari, dan jalankan "make test_harness". Pada cengkerang seperti Bourne, ini boleh dilakukan
as
TEST_JOBS=3 buat test_harness # Jalankan 3 ujian secara selari
Pembolehubah persekitaran digunakan, bukannya selari membuat dirinya sendiri, kerana TAP:: Harness
perlu dapat menjadualkan skrip ujian tidak bercanggah individu itu sendiri, dan ada
tiada antara muka standard untuk "membuat" utiliti untuk berinteraksi dengan penjadual kerja mereka.
Ambil perhatian bahawa pada masa ini beberapa skrip ujian mungkin gagal apabila dijalankan secara selari (terutamanya
ext/IO/t/io_dir.t). Jika perlu, jalankan hanya skrip yang gagal sekali lagi secara berurutan dan lihat
jika kegagalan itu hilang.
Berlari ujian by tangan
Anda boleh menjalankan sebahagian daripada suite ujian dengan tangan dengan menggunakan salah satu daripada arahan berikut daripada
t/ direktori:
./perl -Saya../ lib TEST list-of-.t-files
or
./perl -Saya../ lib abah-abah senarai-fail-.t
(Jika anda tidak menentukan skrip ujian, keseluruhan suite ujian akan dijalankan.)
Menggunakan t/abah-abah khususnya ujian
Jika anda menggunakan "harness" untuk ujian, anda mempunyai beberapa pilihan baris arahan yang tersedia untuk anda.
Hujah-hujah adalah seperti berikut, dan mengikut susunan yang mesti muncul jika digunakan bersama.
harness -v -torture -re=pattern SENARAI FAIL UNTUK DIUJI
harness -v -torture -re SENARAI CORAK YANG SESUAI
Jika "SENARAI FAIL UNTUK DIUJI" ditinggalkan, senarai fail diperoleh daripada manifes. The
senarai fail mungkin termasuk kad bebas shell yang akan dikembangkan.
· -v
Jalankan ujian di bawah mod verbose supaya anda boleh melihat ujian yang dijalankan dan output nyahpepijat.
· -penyiksaan
Jalankan ujian penyeksaan serta set biasa.
· -re=CORAK
Tapis senarai fail supaya semua fail ujian dijalankan sepadan dengan PATTERN. Perhatikan bahawa ini
bentuk adalah berbeza daripada -semula SENARAI OF CORAK borang di bawah kerana ia membenarkan fail
senarai yang akan disediakan juga.
· -semula SENARAI CORAK
Tapis senarai fail supaya semua fail ujian dijalankan sepadan /(SENARAI|DARI|POLA)/. Nota
bahawa dengan bentuk ini corak digabungkan dengan '|' dan anda tidak boleh membekalkan senarai
fail, sebaliknya fail ujian diperolehi daripada MANIFEST.
Anda boleh menjalankan ujian individu dengan arahan yang serupa dengan
./perl -Saya../ lib laluan/ke/foo.t
kecuali abah-abah menyediakan beberapa pembolehubah persekitaran yang mungkin menjejaskan pelaksanaan
daripada ujian:
· PERL_CORE=1
menunjukkan bahawa kami menjalankan ujian ini sebagai sebahagian daripada suite ujian teras perl. Ini adalah
berguna untuk modul yang mempunyai dua hayat pada CPAN.
· PERL_DESTRUCT_LEVEL=2
ditetapkan kepada 2 jika ia belum ditetapkan (lihat "PERL_DESTRUCT_LEVEL" dalam perlhacktips).
· PERL
(hanya digunakan oleh t/UJIAN) jika ditetapkan, mengatasi laluan ke perl boleh laku yang sepatutnya
digunakan untuk menjalankan ujian (makhluk lalai ./perl).
· PERL_SKIP_TTY_TEST
jika ditetapkan, beritahu untuk melangkau ujian yang memerlukan terminal. Ia sebenarnya ditetapkan secara automatik
oleh Makefile, tetapi juga boleh dipaksa secara buatan dengan menjalankan 'make test_notty'.
lain-lain persekitaran pembolehubah Bahawa mungkin mempengaruhi ujian
· PERL_TEST_Net_Ping
Menetapkan pembolehubah ini menjalankan semua ujian modul Net::Ping, sebaliknya beberapa ujian yang
berinteraksi dengan dunia luar dilangkau. Lihat perl58delta.
· PERL_TEST_NOVREXX
Menetapkan pembolehubah ini melangkau ujian vrexx.t untuk OS2::REXX.
· PERL_TEST_NUMCONVERTS
Ini menetapkan pembolehubah dalam op/numconvert.t.
· PERL_TEST_MEMORY
Menetapkan pembolehubah ini termasuk ujian dalam t/bigmem/. Ini harus ditetapkan kepada
bilangan gigabait memori yang tersedia untuk ujian, cth. "PERL_TEST_MEMORY=4"
menunjukkan bahawa ujian yang memerlukan 4GiB memori yang tersedia boleh dijalankan dengan selamat.
Lihat juga dokumentasi untuk modul Test and Test::Harness, untuk lebih banyak persekitaran
pembolehubah yang mempengaruhi ujian.
prestasi ujian
Fail t/perf/penanda aras mengandungi coretan kod perl yang dimaksudkan
ditanda aras merentasi julat perl oleh Porting/bench.pl alat. Jika anda membetulkan atau meningkatkan a
masalah prestasi, anda mungkin mahu menambah sampel kod wakil pada fail, kemudian jalankan
bench.pl terhadap perl sebelumnya dan semasa untuk melihat perbezaan yang telah dibuatnya, dan
sama ada apa-apa lagi telah perlahan sebagai akibatnya.
Fail t/perf/opcount.t direka bentuk untuk menguji sama ada coretan kod tertentu telah
disusun ke dalam optree yang mengandungi nombor tertentu bagi jenis op tertentu. Ini baik
untuk menguji sama ada pengoptimuman yang mengubah op, seperti menukar op "aelem" menjadi
op "aelemfast", benar-benar melakukan itu.
Fail-failnya t/perf/speed.t and t/re/speed.t direka untuk menguji perkara yang berjalan beribu-ribu
kali lebih perlahan jika pengoptimuman tertentu rosak (contohnya, cache panjang utf8
pada rentetan utf8 yang panjang). Tambah ujian yang akan mengambil masa sesaat seperti biasa, dan
minit sebaliknya, menyebabkan fail ujian tamat masa apabila gagal.
MORE MEMBACA UNTUK GUTS PENGGODAM
Untuk menggodam keberanian Perl, anda perlu membaca perkara berikut:
· perlsource
Gambaran keseluruhan pokok sumber Perl. Ini akan membantu anda mencari fail yang anda cari
bagi.
· perlinterp
Gambaran keseluruhan kod sumber penterjemah Perl dan beberapa butiran tentang cara Perl melakukan apa
ia berlaku.
· perlhacktut
Dokumen ini berjalan melalui penciptaan tampalan kecil kepada kod C Perl. Jika anda
baru sahaja bermula dengan penggodaman teras Perl, ini akan membantu anda memahami caranya
kerja.
· perlhacktips
Butiran lanjut tentang menggodam teras Perl. Dokumen ini memfokuskan pada butiran peringkat bawah
seperti cara menulis ujian, isu kompilasi, mudah alih, penyahpepijatan, dsb.
Jika anda bercadang untuk melakukan penggodaman C yang serius, pastikan anda membaca ini.
· perlguts
Ini adalah sangat penting, kerana ia adalah dokumentasi tentang apa yang berlaku
sumber Perl. Baca beberapa kali dan ia mungkin mula masuk akal -
jangan risau jika belum, kerana cara terbaik untuk mempelajarinya adalah dengan membacanya
bersempena dengan mencucuk pada sumber Perl, dan kami akan melakukannya kemudian.
"Perlgut bergambar" Gisle Aas, juga dikenali sebagai sakit hati, mempunyai gambar yang sangat membantu:
<http://search.cpan.org/dist/illguts/>
· perlxstut dan perlxs
Pengetahuan tentang pengaturcaraan XSUB sangat berguna untuk penggodaman teras; XSUB
gunakan teknik yang diambil daripada kod PP, bahagian keberanian yang sebenarnya dilaksanakan
program Perl. Lebih lembut untuk mempelajari teknik tersebut daripada contoh mudah dan
penjelasan daripada daripada inti itu sendiri.
· perlapi
Dokumentasi untuk API Perl menerangkan perkara yang dilakukan oleh beberapa fungsi dalaman, seperti
serta banyak makro yang digunakan dalam sumber.
· Porting/pumpkin.pod
Ini adalah himpunan kata-kata hikmat untuk seorang kuli Perl; sebahagiannya hanya berguna
kepada pemegang labu, tetapi kebanyakannya terpakai kepada sesiapa yang ingin pergi ke Perl
pembangunan.
CPAN PENGUJI DAN mutiara PEROKOK
Penguji CPAN ( http://testers.cpan.org/ ) ialah sekumpulan sukarelawan yang menguji CPAN
modul pada pelbagai platform.
Perokok Perl ( http://www.nntp.perl.org/group/perl.daily-build/ and
http://www.nntp.perl.org/group/perl.daily-build.reports/ ) menguji sumber Perl secara automatik
keluaran pada platform dengan pelbagai konfigurasi.
Kedua-dua usaha mengalu-alukan sukarelawan. Untuk terlibat dalam ujian asap perl
sendiri melawat <http://search.cpan.org/dist/Test-Smoke/>. Untuk memulakan ujian asap
Modul CPAN melawat <http://search.cpan.org/dist/CPANPLUS-YACSmoke/> atau
<http://search.cpan.org/dist/minismokebox/> atau
<http://search.cpan.org/dist/CPAN-Reporter/>.
APA SETERUSNYA?
Jika anda telah membaca semua dokumentasi dalam dokumen dan yang disenaraikan di atas, anda sudah
lebih daripada bersedia untuk menggodam Perl.
Berikut ialah beberapa cadangan lagi
· Langgan perl5-porter, ikuti tampalan dan cuba fahaminya; jangan jadi
takut untuk bertanya jika ada bahagian yang anda tidak jelas - mana tahu, anda mungkin mencungkil a
pepijat dalam tampalan...
· Baca README yang dikaitkan dengan sistem pengendalian anda, cth. README.aix pada IBM
OS AIX. Jangan teragak-agak untuk membekalkan patch kepada README itu jika anda mendapati apa-apa yang hilang
atau ditukar melalui keluaran OS baharu.
· Cari kawasan Perl yang kelihatan menarik kepada anda dan lihat sama ada anda boleh mengetahui caranya
berfungsi. Imbas sumber, dan langkah ke atasnya dalam penyahpepijat. Main, cucuk,
siasat, biola! Anda mungkin akan dapat memahami bukan sahaja kawasan pilihan anda tetapi a
julat yang lebih luas daripada perlaktiviti juga, dan mungkin lebih awal daripada yang anda sangka.
"The Jalan pergi pernah on and satu, turun dari yang pintu di mana it bermula."
Jika anda boleh melakukan perkara ini, anda telah memulakan perjalanan yang panjang ke Perl porting. Terima kasih kerana
ingin membantu menjadikan Perl lebih baik - dan selamat menggodam!
Metafora Sebutharga
Jika anda mengenali petikan tentang Jalan di atas, anda bertuah.
Kebanyakan projek perisian memulakan setiap fail dengan penerangan literal tentang tujuan setiap fail.
Perl sebaliknya memulakan setiap satu dengan kiasan sastera kepada tujuan fail tersebut.
Seperti bab dalam banyak buku, semua fail sumber Perl peringkat atas (bersama dengan beberapa yang lain di sini
dan di sana) bermula dengan inskripsi epigrammatik yang merujuk, secara tidak langsung dan
secara metafora, kepada bahan yang akan anda baca.
Petikan dipetik daripada tulisan J.R.R. Tolkien berkaitan dengan Legendariumnya, hampir
sentiasa dari . Tuhan of yang cincin. Bab dan nombor muka surat diberikan menggunakan
edisi berikut:
· . Hobbit, oleh J.R.R. Tolkien. Kulit keras, edisi ulang tahun ke-70 tahun 2007 ialah
digunakan, diterbitkan di UK oleh Harper Collins Publishers dan di AS oleh Houghton
Syarikat Mifflin.
· . Tuhan of yang cincin, oleh J.R.R. Tolkien. Kulit keras, edisi ulang tahun ke-50
2004 telah digunakan, diterbitkan di UK oleh Harper Collins Publishers dan di AS oleh
Syarikat Houghton Mifflin.
· . Meletak of Beleriand, oleh J.R.R. Tolkien dan diterbitkan secara anumerta oleh anaknya dan
pelaksana sastera, C.J.R. Tolkien, menjadi yang ke-3 daripada 12 jilid dalam Christopher's
mammoth Sejarah of Tengah Bumi. Nombor halaman diperoleh daripada edisi kulit keras,
pertama kali diterbitkan pada tahun 1983 oleh George Allen & Unwin; tiada nombor halaman ditukar untuk
edisi omnibus 3 jilid khas 2002 atau pelbagai edisi kertas perdagangan, semua
sekali lagi sekarang oleh Harper Collins atau Houghton Mifflin.
Permainan pameran buku JRRT lain untuk petikan akan termasuk . Pengembaraan of Tom Bombadil,
. Silmarillion, Belum selesai Cerita-cerita dongeng, dan . Tale of yang Kanak-kanak of Hurin, semua kecuali
pertama kali dipasang secara anumerta oleh CJRT. Tetapi . Tuhan of yang cincin itu sendiri baik-baik saja
dan mungkin terbaik untuk dipetik, dengan syarat anda boleh mencari petikan yang sesuai di sana.
Oleh itu, jika anda membekalkan fail sumber peringkat tinggi yang baharu, lengkap, untuk ditambahkan pada Perl, anda harus
mematuhi amalan pelik ini dengan sendiri memilih petikan yang sesuai daripada
Tolkien, mengekalkan ejaan dan tanda baca asal dan menggunakan format yang sama
petikan selebihnya ada. Tidak langsung dan serong adalah baik; ingat, itu metafora,
jadi meta adalah, selepas semua, untuk apa ia.
Gunakan perlhack dalam talian menggunakan perkhidmatan onworks.net