Daftar Isi:
- Mengumpulkan baris unik
- Menyingkirkan beberapa baris kosong
- Mencetak baris dari file dalam urutan yang diurutkan
- Mencetak berbagai baris dari sebuah file
- Cantumkan hanya file dalam direktori
- Cantumkan sebuah direktori menurut ukuran
- Sortasi direktori dengan ekstensi
- Membuat kalkulator sederhana
- Dalam Perl, menghasilkan bilangan acak mudah dilakukan, namun mengacak urutan array tidaklah sesederhana itu. Namun demikian, Anda dapat menggunakan fungsi sambatan untuk menarik elemen acak dari sebuah array dan kemudian menempatkan elemen di array lain. Program berikut mengacak daftar @MyList:
- Mencoba meyakinkan pengguna komputer untuk menemukan kata kunci yang tidak mudah ditebak adalah salah satu pekerjaan yang paling menantang bagi administrator sistem. Orang-orang sepertinya selalu bersikeras menggunakan nama lahir atau nama hewan peliharaan mereka untuk kata kunci - melanggar keamanan kemudian menjadi permainan anak-anak.
Video: Week 8 2024
Beberapa orang percaya bahwa program pendek tidak baik untuk banyak hal, tapi tidak demikian halnya dengan Perl. Hanya beberapa baris kode Perl yang bisa pergi jauh. Artikel ini mencantumkan beberapa program Perl kecil yang mungil.
Mengumpulkan baris unik
Jika file teks Anda memiliki banyak baris yang merupakan duplikat dan Anda hanya ingin melihat baris yang unik, Anda dapat mengumpulkannya ke dalam array (dalam kasus ini, ini disebut @Unique) dengan program berikut:
buka (IN, "somefile. Txt"); @ Unique = ();
sementara () {kecuali ($ i {$ _} ++) {push (@Unique, $ _)}}
Triknya adalah bahwa $ i {$ _} ++ mengembalikan 0 pertama kalinya Anda membuat pasangan nilai kunci dengan $ _ sebagai kunci, dan beberapa nilai bukan nol setelah itu.
Menyingkirkan beberapa baris kosong
Beberapa file teks memiliki beberapa baris kosong berturut-turut, yang membuat mereka sulit dibaca, terutama pada layar kecil. Program berikut mencetak file teks, mengompres semua contoh dari dua atau lebih baris kosong ke dalam satu baris kosong.
Catatan: Baris kosong dapat memiliki karakter spasi di dalamnya, seperti spasi dan tab, namun tidak ada karakter yang dapat ditampilkan.
buka (IN, "somefile. Txt"); $ PrevBlank = 0;
sementara () {
jika (/ S / atau! $ PrevBlank) {print $ _}
$ PrevBlank = / ^ s * $ /;
}
Pernyataan jika di contoh sebelumnya benar jika ada karakter nonblank di telepon atau jika baris sebelumnya tidak kosong. Tugas $ PrevBlank memberitahu Anda apakah baris saat ini kosong, artinya memiliki nol atau lebih karakter spasi dan tidak ada yang lain.
Mencetak baris dari file dalam urutan yang diurutkan
Sangat mudah untuk melupakan betapa bergunanya fungsi sort Perl. Program berikut membaca keseluruhan file ke dalam array, mengurutkan array, dan mencetak hasilnya. Pendek dan manis, dan cukup efisien untuk boot:
open (IN, "somefile. Txt");
cetak sort ();
Mencetak berbagai baris dari sebuah file
Pernahkah Anda ingin membaca beberapa baris dari sebuah file, dan bukan semuanya? Program berikut hanya mencetak berbagai baris. Anda menjalankan program dengan dua argumen: kisaran yang Anda inginkan dan nama file. Misalnya, jika Anda memberi nama program "showline" Anda dan Anda ingin melihat baris 10 sampai 20 dari somefile. File txt, Anda menggunakan command line ini:
showline 10-20 somefile. txt
Program berikut mencetak berbagai baris:
open (IN, $ ARGV [1]) atau mati "Tidak dapat membaca $ File. n ";
($ Start, $ Stop) = split (/ - /, $ ARGV [0]);
untuk ($ i = 1; $ i <= $ stop; $ i + = 1)
{$ Line =; Jika ($ i> = $ Start) {print $ Line}}
Cantumkan hanya file dalam direktori
Kadang-kadang, Anda mungkin ingin mengabaikan subdirektori di direktori dan hanya fokus pada file.Anda dapat menggunakan tes file berikut -f untuk mencantumkan semua file dalam sebuah direktori:
foreach $ f () {if (-f $ f) {print "$ fn"}}
Cantumkan sebuah direktori menurut ukuran
Untuk mengurutkan, daftar direktori menurut nama selain namanya, program Anda harus menyimpan daftar catatan yang terdiri dari nama dan item lainnya dalam daftar. Hash sangat bagus untuk digunakan untuk daftar jenis ini yang memiliki catatan dengan kunci (nama file) dan nilai (informasi direktori lainnya). Program berikut membuat hash yang mencantumkan ukuran setiap file dalam direktori dan kemudian mengurutkan item untuk output. (Anda dapat dengan mudah memodifikasi program ini untuk mengurutkan menurut tanggal, bukan berdasarkan ukuran.)
foreach $ f () {$ i {$ f} = -s $ f};
foreach $ k (sort {$ i {$ b} <= & gt $ i {$ a}} kunci% i)
{printf "% 8d% sn", $ i {$ k}, $ k }
Sortasi direktori dengan ekstensi
Sortasi oleh sebagian nama file adalah proses yang sedikit lebih sulit daripada menyortir menurut ukuran file atau pada tanggal file tersebut telah dimodifikasi. Program berikut akan memecah nama file menjadi dua dan mengurutkan bagian kedua. Jika Anda menjalankan Perl pada sistem UNIX atau Macintosh, program ini dapat diprediksi hanya jika namafile tidak memiliki periode atau satu periode:
foreach $ FullName () {
($ Name, $ Ext) = split (/. /, $ FullName, 2);
push (@Temp, "$ Extt $ FullName");
}
foreach $ Val (sort (@Temp)) {
($ Ext, $ FullName) = split (/ t /, $ Val);
cetak "$ FullNamen";
}
Membuat kalkulator sederhana
Pernah membutuhkan kalkulator yang mudah digunakan untuk membuat beberapa matematika cepat dan kotor? Program berikut menggunakan fungsi eval Perl untuk mencetak jawaban atas persamaan yang Anda masukkan. Untuk mengakhiri program, masukkan baris kosong. Inilah program untuk membuat kalkulator Anda sendiri:
while () {
$ i = $ _; chomp ($ i); kecuali ($ i) {last}
$ o = eval ($ i); cetak "Answer = $ on";
}
Saat menjalankan program, Anda dapat memasukkan sesuatu seperti berikut:
((2 ** 8) + (3 ** 8))
dan dapatkan hasilnya: > Answer = 6817
Mengacak daftar
Dalam Perl, menghasilkan bilangan acak mudah dilakukan, namun mengacak urutan array tidaklah sesederhana itu. Namun demikian, Anda dapat menggunakan fungsi sambatan untuk menarik elemen acak dari sebuah array dan kemudian menempatkan elemen di array lain. Program berikut mengacak daftar @MyList:
my @TempList = ();
sementara (@MyList)
{push (@TempList, sambatan (@MyList, rand (@MyList), 1))}
@MyList = @TempList;
Triknya adalah rand (@MyList) mengambil angka antara 0 dan jumlah elemen di @MyList, dan sambatan mengubah nomor acak ini menjadi bilangan bulat.
Membangkitkan password mnemonik acak
Mencoba meyakinkan pengguna komputer untuk menemukan kata kunci yang tidak mudah ditebak adalah salah satu pekerjaan yang paling menantang bagi administrator sistem. Orang-orang sepertinya selalu bersikeras menggunakan nama lahir atau nama hewan peliharaan mereka untuk kata kunci - melanggar keamanan kemudian menjadi permainan anak-anak.
Program berikut menghasilkan kata sandi acak. Alih-alih adonan surat yang sulit diingat, bagaimanapun, kata sandinya agak mnemonik karena muncul bersamaan dengan konsonan dan huruf hidup yang bisa diucapkan.Dengan merangkai beberapa suku kata yang konyol, Anda bisa menghasilkan frase omong kosong yang mudah diingat.
Setiap suku kata kata sandi dapat mewakili salah satu dari 100 nomor; Oleh karena itu, satu kata kunci empat suku kata, seperti
votahubo, adalah salah satu dari 100 juta (100 sampai kekuatan keempat) kemungkinan kata kunci yang dihasilkan program. Memiliki administrator sistem menetapkan kata kunci ini memberikan keamanan lebih dari pada membiarkan pengguna memilih kata kunci mereka sendiri yang mudah ditebak: print "Masukkan nomor benih:"; $ s =;
srand ($ s ^ time);
@ c = split (/ * /, "bcdfghjklmnprstvwxyz");
@ v = split (/ * /, "aeiou");
untuk ($ i = 1; $ i <= 4; $ i + = 1)
{print $ c [int (rand (20))], $ v [int (rand (5))] }
Dua baris pertama dari program ini menginisialisasi benih untuk nomor acak, dan dua baris berikutnya membuat daftar berisi 20 konsonan (minus
q ) dan 5 huruf hidup alfabet. Untuk loop hanya mencetak empat suku kata.