Perl Öğreniyoruz - 2

0
cayfer
Geçen hafta çözdüğümüz örneği bir de Perl'in özelliklerinden yararlanarak çözelim.

Editörün notu: Perl öğreniyoruz yazı dizisinin ikincisini okuyorsunuz. Sabırsız olanlarınız için cayfer.bilkent.edu.tr incelenmesi gereken bir adres.
    #!/usr/bin/perl  
    #      
    # /etc/passwd dosyasında kayıtlı gerçek kullanıcı sayısını bulur.  
    # /home altinda bir kişisel dizini olan herkes gerçek kullanıcı kabul edilir.

    open (PWD, "/etc/passwd");
    # 
    # $n : Sayılan kullanıcı sayısı
    while (  ) {
       $n++ if ( /home/ );
    } 
    close (PWD);
    print "Bu sistemde $n kullanıcı kayıtlı

";
    exit;
Tek değişiklik "while" döngüsü içinde...

Bir kere $n değişkenine sıfır ilk değeri verilmiyor. Perl'de bir değişkenin değerini bir arttırmak için önceden tanımlı olması gerekmez. Aslında ne yaptığınızı çok iyi bilmediğiniz durumlarda oldukça da tehlikeli bir özellik olmakla beraber bilinmesinde yarar var.

İkinci önemli fark "while ( )" deyiminde. tek başına bir deyimdir. PWD dosya tanımlayıcısının gösterdiği dosyadan bir satır okumaya çalışır. Başarılı olursa okunan satırı oluşturan karakter dizisi (sonundaki dahil) 'nin atandığı değişkene yerleştirilir. Peki bizim yazdığımız koddaki gibi herhangi bir değişkene atanmazsa ne olacak? Hiç! Madem kullanıcı bir değişken beklirtmemiş, Perl yorumlayıcısı okunan satırı $_ özel değişkenine yerleştirir.

Perl'de $_ gibi daha bir çok özel değişken var. Yeri geldikçe söz edeceğim.

Yukardaki kodda dikkati çeken bir özel durum da "$n++ if ( /home/ );" deyiminde. Bir kere if deyimi alışılmışlardan biraz farklı görünüyor olmalı. Böylesi daha rahat okunduğu için Perl'i geliştiren Larry Wall böyle bir yapı kurmuş.

Bir diğer özel durum da if deyiminin içinde birşeylerin içinde "home" sözcüğü geçiyor mu diye kontrol ediliyor ama "neyin" içinde "home" aranacağı belirtilmiyor. Perl yorumlayıcısı gene tembellik yaptığınızı anlayacak ve "home" dizisini $_ özel değişkeni içinde arayacaktır.

Perl Sayıl Değişkenleri

Perl'de değişkenlerin deklare edilmeleri gerekmez. Değişkenlerin tipleri de yoktur. Yani "tamsayı" değişken, "kayan noktalı" değişken gibi kavramlar yoktur.

Sayıl değişkenlerin isimleri daha önceki bölümde de sözünü ettiğim gibi $ işaretiyle başlar.

Örneğin peşpeşe verilen aşağıdaki Perl komutları, dilin kurallarına pekala uygundur:

     $a = 10;
     $b = $a . "ABC";
     $c = $b + 2;
     $x = "XYZ";
     $x++;
$b = $a . "ABC"; deyimi sayısal bir değer içeren $a değişkeni ile "ABC" karakter dizilerini birleştiriyor. Başka dillerde olsa derleyicinin kıyameti koparacağı bu deyim Perl'de gayet sessizce yerine getirilir. Önce $a değişkenin değeri karakter dizisine çevrilir ( $a'nın değeri değişmez) sonra da iki karakter dizisi birleştirilir. Yani $b : "10ABC" olur.

$c = $b + 2; deyimi karakter dizisi içeren bir değişkenin değerini 2 arttırmak istiyor. Peki! Bu da olur. Önce karakter dizisi değer sayıya çevrilmeye çalışılır. $b değişkenindeki karakter dizisi "10ABC" olduğu için bu diziyi sayıya çevirmeye çalışınca 10 değeri elde edilir. Buna da 2 ekleyince $c : 12 olur.

Son deyimde de sayıya çevrilemeyecek bir karakter dizisi bir arttırılıyor. Burada da "XYZ"nin sayısal değeri sıfır kabul edilecektir.

Perl'de değişkenlerin deklare edilmesi gerekmediğini söylemiştim. Bunun tehlikelerini açıklamaya gerek yok sanırım. Eğer Perl'i bu şekilde kullanmaktan çekiniyorsanız programın başına

    use strict;
deyimini eklemelisiniz. Bu durumda programınız içinde kullanacağınız tüm değişkenleri deklare etme zorunluluğu gelecektir. Perl'de değişken tipi olmadığı için deklarasyonlar yalnızca
    my degisken_ismi;
şeklinde olacaktır. Deklare ederken bir yandan da değer vermek isterseniz
    my $n = 0; 
kalıbını kullanabilirsiniz.

Haftaya Perl'ın asıl silahlarını ortaya çıkaracağım! Listeler ("array"ler) ve Çağrışımlı Listeler ("associated array"ler).

İlgili Yazılar

Kevin Poulsen iş başında!

sundance

Güvenlik dünyasının meşhur kötü çocuklarından, eski Security Focus yazarı Kevin Paulsen, yazdığı bir Perl scriptle U.S. National Sex Offender Registry kayıtları ile MySpace kullanıcılarını karşılaştırıp, bir cinsel suç zanlısının tespitine yardımcı olmuş.

Kendisini daha çok Los Angeles'daki KISS FM'in 102. arayan kişiye verdiği Porsche 944 S2'i kazanabilmek için, bütün telefon konuşmalarını durduran kişi olarak tanıdığımız Dark Dante kod adlı Poulsen yıllardır bilgi güvenliği alanında gazetecilik yapmakta, hatta zaman zaman bu olaydaki gibi otoritelere yardımcı olmakta.

Perl ile insanları dans ettirebilir misiniz?

FZ

Perl programlama dili ile doğaçlama program yapıp bunun sonuçlarını dinleyen insanların dans etmesini sağlayabilir misiniz? Alex Mclean, Hacking Perl in Nightclubs başlıklı fantastik makalesinde bu soruya olumlu yanıt verip işin nasıl yapılacağını anlatıyor.

Aklıma 1960´lı yıllarda tüm zamanların en fantastik müzikal deneyimlerine imza atan, IBM 7090 kullanarak müzik üreten Xenakis geliyor…

Kaynak: http://ileriseviye.org/blog/index.php?p=113

Perl Öğreniyoruz - 1

butch

Haydi millet toplanın. Perl öğrenmeye başlıyoruz :) Bundan sonra düzenli olarak bu köşede Can Uğur Ayfer tarafından hazırlanan Perl Öğreniyoruz makaleleri yayınlanacak. Bu makalelerde, klasik yöntemle, basit problemleri adım adım çözerek beraberce Perl öğreneceğiz. Buyrun ilk derse...

(Can Uğur Ayfer, Kim Korkar Unix`den, Perl ve MySQL ile Cgi Programlama gibi kitapların yazarı, 1973 yılından beri ülkemizde bilgisayar sektörünün duayenlerinden birisidir. Halen aktif olarak çalışmakta öğrenmeye, öğretmeye aynı coşku ile devam etmektedir. Kendisine sonsuz teşekkürler)

Perl 20. Doğum Günü ve Perl 5.10 Çıktı

anonim

Geçtiğimiz günlerde Perl'in 20. yaşgünü tüm dünyada coşku ile kutlandı. Doğum gününden 1 gün önce Perl Vakfı Perl 5.10'u duyurdu.

Perl 5.10 da görünen en önemli değişiklik smart match operator. Bir tür karşılaştırma yapmamıza yarayan operatör array içinde aradığımız scalar değeri bulmamızı sağlıyor. Yeni operatörümüz: "~~". Örnek vermek gerekirse $needle scalarimizi array @haystack içinde arıyorsak, kolayca yeni operatörümüzü kullanıyoruz.
if ($needle ~~ @haystack) ...

Sonuç olarak artık Perl'de tüm kaşılaştırmalar doğru şeyi yapmamızı sağlıyor.

Moleküler Biyoloji, Bioinformatik, 21. yy. ve Perl

FZ

60'lı yıllarda uzaya gitmek son moda idi. Sonra hızlı bilgisayarlar, gösterişli teknolojiler geldi, 90'lar böyle geçti. 21. yy ise moleküler biyoloji çağı olacak gibi görünüyor. Bilgisayar teknolojisi ve moleküler biyolojide son 30 yıl içinde kaydedilen ilerlemeler hayat bilimlerinin çehresini bir hayli değiştirdi. Aslında biyoloji o kadar da değişmedi, halen saha çalışması yapan biyologlar günlerce egzotik mekanlarda, zor koşullarda dolanıp garip canlıları inceliyorlar. Ancak hesaplamalı moleküler biyoloji sayesinde `hayat´ kavramına bakışımız epey gelişti. Artık organizmaların iç yapısı hakkında çok daha derinlemesine soru sorabiliyoruz.

Peki bütün bunların, tüm zamanların en fantastik programlama dillerinden biri olan ve doğal dile öykünmesi ile de bilinen Perl programlama dili ile ilgisi nedir? `Hacking´ ve `biyoloji´ kavramları aynı cümle içinde kullanılabilir mi?