Isi kandungan:
- Mengumpulkan garisan yang unik
- Menyingkirkan beberapa baris kosong
- Jalur percetakan dari fail dalam urutan yang disusun
- Mencetak pelbagai baris dari fail
- Penyenaraian hanya fail dalam direktori
- Menyenaraikan direktori mengikut saiz
- Mengasingkan direktori dengan lanjutan
- Membuat kalkulator mudah
- Dalam Perl, menghasilkan nombor rawak mudah, tetapi rawak urutan array tidaklah mudah. Walau bagaimanapun, anda boleh menggunakan fungsi splice untuk menarik elemen rawak dari array dan kemudian letakkan unsur dalam array lain. Program berikut merangkumi senarai @ MyList:
- Cuba untuk meyakinkan pengguna komputer untuk menghasilkan kata laluan yang tidak mudah ditebak merupakan salah satu pekerjaan yang paling mencabar untuk pentadbir sistem. Orang selalu seolah-olah mendesak menggunakan tarikh lahir mereka atau nama haiwan peliharaan untuk kata laluan - melanggar keselamatan kemudian menjadi permainan kanak-kanak.
Video: Week 8 2024
Sesetengah orang percaya bahawa program pendek tidak baik untuk banyak, tetapi itu tidak begitu dengan Perl. Hanya beberapa baris kod Perl boleh pergi jauh. Artikel ini menyenaraikan beberapa program Perl, kecil Perlahan.
Mengumpulkan garisan yang unik
Jika fail teks anda mempunyai banyak baris yang pendua dan anda hanya mahu melihat garisan yang unik, anda boleh mengumpulnya ke dalam array (dalam kes ini, ia dipanggil @Unique) dengan program berikut:
terbuka (IN, "somefile. Txt"); @ Unik = ();
sementara () {kecuali ($ i {$ _} ++) {push (@Unique, $ _)}}
Silap mata di sini ialah $ i {$ _} ++ mengembalikan 0 kali pertama anda membuat pasangan nilai utama dengan $ _ sebagai kunci, dan beberapa nilai nonzero selepas itu.
Menyingkirkan beberapa baris kosong
Sesetengah fail teks mempunyai beberapa baris kosong berturut-turut, yang membuat mereka sukar dibaca, terutama pada skrin kecil. Program berikut mencetak fail teks, memampatkan semua contoh dua atau lebih baris kosong ke satu baris kosong.
Nota: Garis kosong boleh mempunyai aksara ruang kosong di dalamnya, seperti ruang dan tab, tetapi tiada aksara yang boleh dipamerkan.
terbuka (IN, "somefile. Txt"); $ PrevBlank = 0;
while () {
if (/ S / or! $ PrevBlank) {print $ _}
$ PrevBlank = / ^ s * $ /;
}
Pernyataan jika dalam contoh terdahulu adalah benar jika terdapat aksara nonblank pada baris atau jika baris sebelumnya tidak kosong. Tugasan $ PrevBlank memberitahu anda sama ada baris semasa kosong, bererti ia mempunyai sifar atau lebih banyak ruang kosong dan tidak ada lagi.
Jalur percetakan dari fail dalam urutan yang disusun
Mudah untuk dilupakan bagaimana fungsi semakan Perl berguna. Program berikut membaca keseluruhan fail ke dalam array, menyusun array, dan mencetak hasilnya. Pendek dan manis, dan cukup cekap untuk boot:
terbuka (IN, "somefile. Txt");
cetak semak ();
Mencetak pelbagai baris dari fail
Pernahkah anda mahu membaca hanya beberapa baris dari fail, dan bukan semuanya? Program berikut mencetak hanya beberapa baris. Anda menjalankan program dengan dua hujah: julat yang anda inginkan dan nama fail. Sebagai contoh, jika anda menamakan program anda "showline" dan anda mahu melihat baris 10 hingga 20 dari beberapa fail. fail txt, anda menggunakan baris arahan ini:
showline 10-20 somefile. txt
Program berikut mencetak pelbagai baris:
terbuka (IN, $ ARGV [1]) atau mati "Tidak dapat membaca $ Fail. n ";
($ Mula, $ Stop) = berpecah (/ - /, $ ARGV [0]);
untuk ($ i = 1; $ i <= $ stop; $ i + = 1)
{$ Line =; jika ($ i> = $ Mula) {mencetak $ Line}}
Penyenaraian hanya fail dalam direktori
Pada masa-masa, anda mungkin mahu mengabaikan subdirektori dalam direktori dan hanya memfokuskan pada fail.Anda boleh menggunakan ujian fail -f berikut untuk menyenaraikan semua fail dalam direktori:
foreach $ f () {if (-f $ f) {print "$ fn"}}
Menyenaraikan direktori mengikut saiz
Untuk menyusun, senarai direktori oleh apa-apa selain daripada nama failnya, program anda harus menyimpan senarai rekod yang mengandungi nama dan item lain dalam penyenaraian. Hashes sangat baik untuk digunakan untuk senarai jenis ini yang mempunyai rekod dengan kunci (nama fail) dan nilai (maklumat direktori lain). Program berikut mencipta hash yang menyenaraikan saiz setiap fail dalam direktori dan kemudian menyusun item untuk output. (Anda boleh mengubah suai program ini dengan mudah mengikut tarikh mengikut saiznya.)
foreach $ f () {$ i {$ f} = -s $ f};
foreach $ k (sort {$ i {$ b} <= & gt $ i {$ a}}% i)
{printf "% 8d% sn", $ i {$ k}, $ k }
Mengasingkan direktori dengan lanjutan
Mengisih sebahagian daripada nama fail adalah proses yang sedikit lebih sukar daripada menyusun mengikut saiz fail atau tarikh diubah suai. Program berikut memecahkan nama fail menjadi dua dan sebutan oleh bahagian kedua. Jika anda menjalankan Perl pada sistem UNIX atau Macintosh, program ini dapat diramal hanya jika nama fail tidak mempunyai tempoh atau satu tempoh:
foreach $ FullName () {
($ Name, $ Ext) = split (/. /, $ FullName, 2);
push (@Temp, "$ Extt $ FullName");
}
foreach $ Val (sort (@Temp)) {
($ Ext, $ FullName) = split (/ t /, $ Val);
mencetak "$ FullNamen";
}
Membuat kalkulator mudah
Pernah diperlukan kalkulator yang mudah digunakan untuk mengetuk matematik cepat dan kotor? Program berikut menggunakan fungsi eval Perl untuk mencetak jawapan kepada mana-mana persamaan yang anda masukkan. Untuk menamatkan program, masukkan garisan kosong. Berikut adalah program untuk membuat kalkulator anda sendiri:
while () {
$ i = $ _; chomp ($ i); kecuali ($ i) {akhir}
$ o = eval ($ i); cetak "Jawapan = $ pada";
}
Apabila anda menjalankan program ini, anda boleh memasukkan sesuatu seperti berikut:
((2 ** 8) + (3 ** 8))
dan anda mendapat hasil ini: > Jawapan = 6817
Rawak senarai
Dalam Perl, menghasilkan nombor rawak mudah, tetapi rawak urutan array tidaklah mudah. Walau bagaimanapun, anda boleh menggunakan fungsi splice untuk menarik elemen rawak dari array dan kemudian letakkan unsur dalam array lain. Program berikut merangkumi senarai @ MyList:
my @TempList = ();
while (@MyList)
{push (@TempList, splice (@MyList, rand (@ MyList), 1))}
@MyList = @TempList;
Silap mata di sini ialah rand (@MyList) memilih nombor antara 0 dan bilangan unsur dalam @ MyList, dan sambatan mengubah nombor rawak ini ke integer.
Menjana kata laluan mnemonik rawak
Cuba untuk meyakinkan pengguna komputer untuk menghasilkan kata laluan yang tidak mudah ditebak merupakan salah satu pekerjaan yang paling mencabar untuk pentadbir sistem. Orang selalu seolah-olah mendesak menggunakan tarikh lahir mereka atau nama haiwan peliharaan untuk kata laluan - melanggar keselamatan kemudian menjadi permainan kanak-kanak.
Program berikut menjana kata laluan rawak. Walau bagaimanapun, sebilangan huruf kecil yang sukar dipahami, kata laluan agak mnemonik kerana ia muncul dalam pasangan konsonan dan huruf vokal yang boleh diucapkan.Dengan menyusun bersama-sama beberapa suku kata yang berbunyi goyah, anda boleh menjana frasa karut yang mudah diingat.
Setiap suku kata kata laluan boleh mewakili mana-mana satu daripada 100 nombor; oleh itu, kata laluan empat suku kata tunggal, seperti
votahubo, adalah salah satu daripada 100 juta (100 hingga keempat kuasa) kata laluan yang mungkin dihasilkan oleh program. Mempunyai pentadbir sistem memperuntukkan kata laluan ini memberikan lebih banyak keselamatan daripada membiarkan pengguna memilih kata laluan mereka sendiri, mudah ditebak: mencetak "Masukkan nombor benih:"; $ s =;
srand ($ s ^ time);
@ c = split (/ * /, "bcdfghjklmnprstvwxyz");
@ v = split (/ * /, "aeiou");
untuk ($ i = 1; $ i <= 4; $ i + 1)
{print $ c [int (rand (20) }
Dua baris pertama program ini memulakan benih untuk nombor rawak, dan dua baris berikutnya membuat senarai mengandungi 20 konsonan (minus
q ) dan 5 huruf vokal dalam abjad. Gelung tersebut hanya mencetak empat suku kata.