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

`Diğerleri(miz) için Flash´

butch

Perl::Flash ın beta sürümünün hazır olduğu Slashdot da duyuruldu. Artık Perl kullanarak Flash animasyonları yapılabilecek. Proje hakkında geniş bilgi burada...

Perl Öğreniyoruz - 4

cayfer

Daha önceki bölümler:
1. bölüm
2. bölüm
3. bölüm
Bu hafta konumuzda çağrışımlı listeler var, Haftaya "regexp"ler! Bu arada merak ettiğim birşey var: Acaba bu Perl tefrikasından yararlanan var mı?

Perl Öğreniyoruz - 3

cayfer

2. bölümün sonunda bu hafta "listeler"den söz edeceğimi söylemiştim.

Listeler (arrays) Perl'in çok güçlü olduğu konulardan birisidir. Perl'de bir listeden söz ederken değişken adının başına bir @ işareti koymalısınız. (Hatırlıyorsanız sayıl (scalar) değişkenlerin adı $ işareti ile başlardı).

Geleceğin Programlama Dili: Perl 6

FZ

Bazı programlama dillerinin takipçileri vardır, bazılarının fanatikleri. Ancak çok az programlama dili ile ilgili kitapta o programlama dilinin "kültürü"ne ve doğal dil ile ilişkisine dair özel bir bölüm bulabilirsiniz.

Kolayı kolay, imkansızı mümkün kılan Perl dili 16 yıl önce yani 1987 yılında doğduğunda bu kadar yaygınlaşabileceğini ve genişleyeceğini belki de yaratıcısı Larry Wall bile tahmin etmiyordu.

Şimdi ise Larry Wall ve önderliğindeki dahi programcı ekibi binlerce Perl programcısının isteklerini de inceleyerek yeni bir efsaneye imza atmak için geceli gündüzlü çalışıyorlar. Beyler, bayanlar, karşınızda Perl 6'nın hikayesi:

Perl: Engellilere Yardım Eden Programlama Dili

FZ

Perl'ü hemen her şey için kullanıyoruz; Web geliştirimi, veri işleme, sistem yönetimi hatta biyolojik araştırmalar için. Çoğumuz Perl'ü bu işlerden birisi için kullandık. Ancak sadece bir kaç kişi Perl'ü grafik arabirimli (GUI) son-kullanıcı programları oluşturmak için kullanmıştır ve bildiğim kadarıyla, bu dünyada sadece iki kişi Perl'ü engellilerin hayatını kolaylaştırmak için kullandı: Jon Bjornstad ve ben. Bazı insanlar, bizim Perl'ü kullanma şeklimizi özel bir durum olarak görebilirler fakat benim hikayem size, yazılım geliştirebilen herhangi bir babanın, çocuğu için yapacağını yaptığımı gösterecek.