#!/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 (Tek değişiklik "while" döngüsü içinde...) { $n++ if ( /home/ ); } close (PWD); print "Bu sistemde $n kullanıcı kayıtlı "; exit;
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 ( 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.
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:
$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
Haftaya Perl'ın asıl silahlarını ortaya çıkaracağım! Listeler ("array"ler)
ve Çağrışımlı Listeler
("associated array"ler).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.
$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. 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.