İçindekiler:
- Benzersiz satırlar toplama
- Birden çok boş satırdan kurtulma
- Bir dosyadan satırları sıralı olarak yazdırma
- Bir dosyadan bir dizi satır basma
- Yalnızca bir dizinde bulunan dosyaları listelemek
- Bir dizinin boyutuna göre listelenmesi
- Dizinleri uzantıyla sıralama
- Basit bir hesap makinesi oluşturma
- Perl'de rastgele sayılar üretmek kolaydır, ancak bir dizinin sıralamasını randomize etmek o kadar kolay değildir. Bununla birlikte, bir diziden rasgele bir eleman çekmek için ekleme işlevini kullanabilir ve ardından öğeyi başka bir diziye yerleştirebilirsiniz. Aşağıdaki program @MyList listesini randomize eder:
- Bilgisayar kullanıcılarını kolayca tahmin edilemeyen şifreleri bulmaya ikna etmeye çalışmak, bir sistem yöneticisi için en zorlu işlerden biridir. İnsanlar, doğum tarihlerini veya evcil hayvanların adlarını parolalar için kullanmayı ısrar ediyor gibi görünür; güvenlik ihlalleri çocuk oyuncağı haline gelir.
Video: Revolution OS [2001] - Türkçe Altyazılı 2024
Bazı insanlar kısa programların çok fazla olmadığını düşünüyor, ancak Perl'de böyle değil. Sadece birkaç satırlık Perl kodu uzun bir yol kat edebilir. Bu makale, kullanışlı ufacık, küçük Perl programlarını listeler.
Benzersiz satırlar toplama
Metin dosyanız çoğaltılmış birçok satır içeriyorsa ve yalnızca benzersiz satırları görmek istiyorsanız, aşağıdaki programla bunları bir dizi (bu durumda @Unique olarak adlandırılır) olarak toplayabilirsiniz:
açık (IN, "somefile. Txt"); @ Benzersiz = ();
while () {sürece ($ i {$ _} ++) {push (@Unique, $ _)}}
Burada hüner, $ i {$ _} ++ ilk defa 0 döndürmesidir anahtarı $ _ ve bundan sonra da sıfır olmayan bir değeri olan bir anahtar / değer çifti oluşturursunuz.
Birden çok boş satırdan kurtulma
Bazı metin dosyalarında, özellikle küçük ekranlarda onları okumayı zorlaştıran ardışık boş satırlar vardır. Aşağıdaki program, iki veya daha fazla boş satırın tüm örneklerini tek bir boş satıra sıkıştırarak bir metin dosyası yazdırır.
Not: Boş bir satır, boşluklar ve sekmeler gibi boşluk karakterlerine sahip olabilir, ancak görüntülenebilir karakterler olamaz.
açık (IN, "somefile. Txt"); $ PrevBlank = 0;
while () {
if (/ S veya veya! $ PrevBlank) {print $ _}
$ PrevBlank = / ^ s * $ /;
}
Yukarıdaki örnekte if ifadesi, satırda boş olmayan karakterler varsa veya önceki satır boş değilse geçerlidir. $ PrevBlank ataması, geçerli satırın boş olup olmadığını, sıfır veya daha fazla boşluk karakteri ve başka bir şey olmadığını belirtir.
Bir dosyadan satırları sıralı olarak yazdırma
Perl'in sıralama işlevinin ne kadar yararlı olduğunu unutmak kolaydır. Aşağıdaki program tüm dosyayı bir diziye okur, diziyi sıralar ve sonucu yazdırır. Kısa ve tatlı ve oldukça önyükleme yapılabilir:
open (IN, "somefile. Txt");
print sort ();
Bir dosyadan bir dizi satır basma
Hiç bir dosyadan sadece bir kaç satır okumak istemiş miydiniz hiç değil mi? Aşağıdaki program sadece bir satır aralığı basmaktadır. Programı iki bağımsız değişkenle çalıştırırsınız: istediğiniz aralık ve dosya adı. Örneğin, programınızı "showline" olarak adlandırırsanız ve somefile'nin 10 ila 20 satırlarını görmek istiyorsanız. txt dosyasında, şu komut satırını kullanırsınız:
showline 10-20 somefile. txt
Aşağıdaki program bir satır aralığı yazdırır:
open (IN, $ ARGV [1]) veya "$ File okunamadı. n”
($ Başlangıç, $ Dur) = split (/ - /, $ ARGV [0]);
için ($ i = 1; $ i <= $ dur; $ i + = 1)
için {$ Line =; if ($ i> = $ Başlangıç) {print $ Line}}
Yalnızca bir dizinde bulunan dosyaları listelemek
Bazen bir dizindeki alt dizinleri yoksaymak ve dosyalara odaklanmak isteyebilirsiniz.Bir dizindeki tüm dosyaları listelemek için aşağıdaki -f dosya sınamasını kullanabilirsiniz:
foreach $ f () {if (-f $ f) {print "$ fn"}}
Bir dizinin boyutuna göre listelenmesi
Dizin listesini, dosya adlarından başka bir şeyle sıralamak için, programınız listedeki adlar ve diğer öğelerden oluşan kayıtların bir listesini tutmalıdır. Kareler, bir anahtar (dosya adı) ve bir değer (diğer dizin bilgileri) içeren kayıtlara sahip olan bu tür bir liste için kullanmak için mükemmeldir. Aşağıdaki program, dizindeki her bir dosyanın boyutunu listeleyen bir karmayı oluşturur ve daha sonra çıktı için öğeleri sıralar. (Bu programı, boyut yerine tarihe göre sıralamak için kolayca değiştirebilirsiniz.)
foreach $ f () {$ i {$ f} = -s $ f};
foreach $ k (sıralama {$ i {$ b} <= & gt $ i {$ a}} anahtarları% i)
{printf "% 8d% sn", $ i {$ k}, $ k }
Dizinleri uzantıyla sıralama
Dosya adının bir bölümüne göre sıralama, dosya boyutu veya dosyanın değiştirilme tarihine göre sıralama işleminden biraz daha zor bir işlemdir. Aşağıdaki program dosya adını ikiye böler ve ikinci bölümde sıralar. Bir UNIX veya Macintosh sisteminde Perl çalıştırıyorsanız, bu program öngörülebilir şekilde, yalnızca dosya adlarında herhangi bir nokta veya nokta bulunmaması halinde çalışır:
foreach $ TamAdı () {
($ Name, $ Ext) = split /./, $ Tam İsim, 2);
itin (@Temp, "$ Extt $ TamAdı");
}
foreach $ Val (sort (@Temp)) {
($ Ext, $ TamAdı) = split (/ t /, $ Val);
print "$ FullNamen";
}
Basit bir hesap makinesi oluşturma
Şimdiye dek bazı hızlı ve kirli matematiğini kesmek için kullanımı basit bir hesap makinesi gerekli muydu? Aşağıdaki program, girdiğiniz herhangi bir denklemin cevaplarını basmak için Perl'in eval işlevini kullanır. Programı sonlandırmak için boş bir satır girin. Kendi hesap makinenizi oluşturmak için şu program var:
while () {
$ i = $ _; chomp ($ i); sürece ($ i) {son}
$ o = değerlendirme ($ i); "Answer = $ on" yazdı;
}
Programı çalıştırdığınızda, aşağıdakine benzer bir değer girebilirsiniz:
((2 ** 8) + (3 ** 8))
ve bu sonuca ulaşırsınız: > Answer = 6817
Bir listeyi rasgele seçme
Perl'de rastgele sayılar üretmek kolaydır, ancak bir dizinin sıralamasını randomize etmek o kadar kolay değildir. Bununla birlikte, bir diziden rasgele bir eleman çekmek için ekleme işlevini kullanabilir ve ardından öğeyi başka bir diziye yerleştirebilirsiniz. Aşağıdaki program @MyList listesini randomize eder:
my @TempList = ();
while (@MyList)
{push (@TempList, splice (@MyList, rand (@MyList), 1))}
@MyList = @TempList;
Buradaki hüner, rand'ın (@MyList) @MyList'deki 0 ve element sayısı arasında bir sayı seçmesi ve splice bu rasgele sayıyı bir tam sayıya çevirir.
Rasgele hatırlatma şifrelerini oluşturma
Bilgisayar kullanıcılarını kolayca tahmin edilemeyen şifreleri bulmaya ikna etmeye çalışmak, bir sistem yöneticisi için en zorlu işlerden biridir. İnsanlar, doğum tarihlerini veya evcil hayvanların adlarını parolalar için kullanmayı ısrar ediyor gibi görünür; güvenlik ihlalleri çocuk oyuncağı haline gelir.
Aşağıdaki program rastgele şifreler üretir. Bununla birlikte, unutulmaya zorlanan harflerin karmakarışık hareketi yerine, ancak parola, telaffuz edilebilen ünsüzler ve sesli harf çiftlerinde göründükleri için biraz anıtsaldır.Birkaç goofy-sounding heceli birlikte dizerek, kolay hatırlanan saçma cümleler üretebilir.
Parolanın her hece 100 sayıdan herhangi birini temsil edebilir; Bu nedenle, votahubo, gibi tek bir dört heceli şifre, programın ürettiği olası 100 milyondan (100'den dördeye kadar) olası parolalardan biridir. Bu şifreleri atayan bir sistem yöneticisine sahip olmak, kullanıcıların kolayca tahmin edebileceklerini düşündükleri şifreleri seçmelerine izin vermekten daha fazla güvenlik sağlar: print "Bir şifre numarası girin"; $ s =;
srand ($ s ^ zaman);
@c = split (/ * /, "bcdfghjklmnprstvwxyz");
@v = split (/ * /, "aeiou");
($ i = 1, $ i <= 4, $ i + = 1) için
{print $ c [int (rand (20))], $ v [int (rand (5))] }
Bu programın ilk iki satırı, rasgele sayılar için tohum başlatır ve sonraki iki satır, 20 harfi içeren (eksi
q ) ve alfabenin 5 harfini oluşturur. For döngüsü sadece dört heceli basar.