| PERL"E GİRİŞ
Perl, Unix isletim sistemi için, Larry Wall tarafindan gelistirilmis, yorumlayici bir programlama dilidir. Server tarafinda çalisir. Dosya tipi(uzantisi) "pl" dir. Unix ya da Linux ortaminda; perl programin ilk satirinda;
#!/usr/local/bin/perl yada #!/usr/bin/perl
komut satiri olmalidir. Bu satir, perl derleyicisinin bulundugu dizini belirtir. Dos ortaminda ise ( Perl kodlarinin bulundugu dizinde ); perl dosyaadi.pl diye girilmelidir.
Perl programlarinin çalistirilabilmesi için bir web serverimizin olmasi gerekir. Unix veya Linux ortamlarinda çalisan Apache server veya buna benzeyen programlar kullanilabilir.
Birinci Perl Programı: Ilk Perl programini deneme yazilimlarla yapicaz denicez ögrenicez. Perl programlama dilinde, ekrana yazdirmak istediklerimizi "print" komutu ile yazdiriyoruz. Örnek 1:
#!/usr/bin/perl print ("Birinci Perl Programini yaziyoruz.");
Ekranda söyle görülülecektir:
Birinci Perl Programini yaziyoruz.
Örnek 2:
print ("Adim Soyadim")
Perl "de alt alta yazilar yazmak iiçin "\n" parametresi kullanilir.
Örnek 3:
print ("Alt satira geçmek perl "de\n", " nasil oluyor diye deniyorum.");
Ekranda söyle görülülecektir:
Alt satira geçmek perl "de nasil oluyor diye deniyorum.
Sayisal Ifadeler:
Perl programlama dilinde; sayisal ifadeler diger dillerde oldugu sekilde yani direct olarak yazilarak ifade edilir. Yani ekrana 15 gibi bir sayisal ifade yazilacaksa bu alttaki sekilde yazilmalidir. :
print (15);
sayisal ifadeler üzerinde yapilan islemler ise C dilinin syntax "ina benzer. Perl, 10"lu sayi sistemi yaninda 8"li ve 16"li sayi sistemlerini de kullanir. Örnegin;
15 sayisinin10"lu sistemde karsiligi: (1*10)+5 = 15 15 sayisinin 8"li sistemde karsiligi: (1*8) +5 = 13 15 sayisinin 16"li sistemde karsiligi: (1*16)+5 = 21 dir...
PERL"E DERSLERİ - 1
Öncelikle program yazmaya baslamadan önce PERL derleyisini internettan temin etmemiz gerekiyor. Derleyiciyi kullandiginiz isletim sistemi icin asagidaki adreslerden temin edebilirsiniz. Daha genis bilgiyi http://www.Perl.com adresinde bulabilirsiniz.
Atari: ftp://atari.archive.umich.edu/atari/Languages Apple Macintosh: http://www.Perl.com/CPAN-local/ports/mac MS-Dos: http://www.Perl.com/CPAN-local/ports/msdos Novell Netware: http://www.Perl.com/CPAN-local/ports/netware IBM OS/2: http://www.perl.com/CPAN-local/ports/os2 Windows 95/98: http://www.activeware.com/
Cogunlugun Windows 95/98/NT tabanli bir bilgisayari oldugunu varsayarak, burada Perl derleyicisini bu sistem icin nasil kuracaginizi anlatacagim. Perl derleyicisi, Linux kurulumu sirasinda standart olarak sistem üzerine kurulur. Programi http://www.activeware.com/ adresinden yükledikten sonra Windows Explorer üzerinden secerek calistirin. Bu bir sikistirilmis paket oldugu icin, önce karsiniza söyle bir pencere cikacak: OK tusuna bastiktan sonra, bir sonraki pencerede sikistirilmis programin hangi kütüge acilacagini tespit edeceksiniz. Programin kurulmasi icin gerekli tüm dosyalar bu kütüge kopyalanacak. Unzip tusuna bastiktan sonra programi kurmak icin gerekli tüm dosyalar c:\Perl (ya da sizin tespit ettiginiz baska bir kütüge) kopyalanir. Kopyalama islemi sonunda otomatik olarak bu kütükten Perlw32-install.bat programi calismaya baslayarak, PERL derleyicisini sisteminiz üzerinde kurar. Kurma islemi bittikten sonra, bilgisayarinizi kapatarak, yeniden calistirin. Simdi PERL dilinde program yazmaya hazirsiniz. Perl derleyicisini bilgisayariniz üzerinde herhangi bir dizin icinden calistirabilmek icin, autoexec.bat dosyasina asagida yer alan komutu ekleyin:
Set PATH=c:\Perl\bin;$PATH
"Merhaba Dünya" programini yazarak, PERL diline giris yapmak istiyorum.
print "Merhaba Dünya !\n";
Programimiz tek bir satirdan olusuyor ve ekrana Merhaba Dünya yazisini basiyor. Programi nasil calistiracagiz? Herhangi bir editör ile, örnegin Windows notepad, bu satiri yazin ve merhaba.pl ismi altinda bilgisayariniz üzerinde dosyalayin. Simdi MS-DOS promptu acarak asagidaki satiri yazin:
c:\> Perl merhaba.pl
Perl ile derleyiciyi calistiriyor ve argüman olarak program ismini veriyoruz. Derleyici programi derledikten sonra, program sonucunu ekrana basar. Bu durumda ekranda meshur Merhaba Dünya yazisini görecegiz. Eger bilgisayariniz Perl programinin bulamadiysa, command not found seklinde bir mesaj alabilirsiniz. O zaman c:\Perl\bin\Perl merhaba.pl yazarak programi calistiriabilirsiniz. Program icinde kullandigimiz \n, Merhaba Dünya yazisini ekrana bastiktan sonra yeni bir satira atlar. Print komutu ile bir kelime ya da cümleyi ekrana basmak istiyorsaniz, kelime ya da cümleyi tirnak isaretleri arasina almaniz gerekiyor. Bu rakamlar icin gecerli degildir. Ilerleyen satirlarda bunun örneklerini görecegiz. Bu arada: string terimini sikca kullanacagim icin, simdiden ne anlama geldigini aciklamak istiyorum. String, bir kelime ya da cümleden olusan bir harf gurubudur. Örnegin print "Merhaba Dünya" örneginde print fonksiyonuna, ekrana basmasi icin bir string gönderdik. Stringler, programlama yaparken herzaman kullanacagimiz kaliplar olacaktir. Burada yer alan bircok örnekte de stringler kullanilmaktadir. Bundan böyle kelime ya da cümle yerine string terimini kullanacagim. Bu kisa giristen sonra, artik isterseniz yavas yavas PERL dilini yakindan inceleyelim. Bilgisayar programlari bir takim veriler üzerinde calismak icin yazilir. Bu veriler rakam, harf, kelime ya da cümle olabilir. Programlama dillerinde islemek istediginiz verinin hangi tipte oldugunu belirtmeniz gerekmektedir. Veriler, degisken (variable) adi verilen isimler araciligiyla bilgisayar bellegine yerlestirilir.
$isim="Mehmet"; $sayi=1224;
Yukardaki örnekte $isim bir degiskendir ve icerdigi veri "Mehmet" dir. Mehmet bir isim ve kelime oldugu icin, programlama dillerinde bu veritipi string olarak isimlendirilir (daha önce ögrenmistik). Buna karsi $sayi degiskeni 1224 rakamini icermektedir. $sayi degiskeninin veri tipi ise integer olarak isimlendirilir. Peki neden veri tiplerine ihtiyacimiz var? Yüksek programlama dilleri olarak bilinen C/C++ ya da Java gibi dillerde kodu derleyen program (Compiler) degiskenlerin veritiplerini siki bir sekilde kontrol eder. Uyusmayan veritipleri arasinda operasyon yapmak mümkün degildir. Örnegin bir interger degiskeni ile bir string degiskenini toplamak mükün degildir. Eger böyle bir kod yazarsaniz, kodu derleyen Compiler hata vererek, derlemeyi yarida keser. C/C++ ya da Java dillerinde, veritipleri arasindaki uyum kontrol edildigi icin cok komplex programlar yazmak mümkündür. Veritipi uyumu kontrolü sayesinde bilgisayarin bellegi cok iyi organize edilir ve programlar hizli ve hatasiz calisir. C/C++ ya da Java dillerinde oldugu gibi Perl dilinde de veritipi kontrolü yapilir. Program yazma mantigini anlayabilememiz icin veritiplerini ve nasil kullanildiklarini cok iyi anlamamiz gerekiyor. Bu yüzden: gelin simdi Perl"ün kullandigi veri tiplerini inceleyelim.
Perl de iki veritipi katagorisi vardir:
a. Skalar degiskenler, (sayilar, stringler ve göstergecler) b. Listeler (array ve hashler)
Skalar olarak isimlendirilen veritipi katagorisi, rakam, harf ya da kelimelerden olusan veriler icin kullanilir.
Skalar Veritipi:
rakam: $sayi=1224; string: $str="merhaba";
Liste veritipi katagorisinden bir degisken, isminden de anlasildigi gibi, bünyesinde cesitli skalar veri tiplerinden olusan bir listeyi barindirir.
Liste Veritipi:
print (1,2,"AA",4,7); # Listeyi ekrana basar. print sort (1,5,6,7); # Listeyi kücükten büyüge dogru sirali ekrana basar. print reverse (3,6,7,2);# Listeyi sondan basa dogru ekrana basar. ($a,$b)=(14,34); # $a ve $b ye parantez icindeki degerleri esler. $array=(1,2,3); # 1,2,3 rakamlarindan olusan bir liste olusturur. %HASH=("1","bir",2,"iki"); #Hash tipii bir liste olusturur.
Liste veritipi katagorisine dahil array ve hash degisken tiplerini kitabin ilerleyen sayfalarinda tematize edecegim. Perl dilinde kullanilan veritiplerini tanidik. Veritiplerinin cok önemli olduklarini düsündügüm icin, kitabin ilerleyen sayfalarinda bu konu hakkinda detaya girecegim. Veritipleri, herhangi bir verinin bilgisayar bellegindeki cinsini belirler. Bilgisayar bellegine yerlestirilen verilere programlama tekniginde degisken olarak tanimlanan isimler araciligla ulasiriz. Örnegin $isim="Ahmet" seklinde bir tanimlama, bilgisayar hafizasinda Ahmet kelimesini alacak kadar bir alan ayarlar. Biz yazdigimiz programin icinden bu veriye $isim degiskeni üzerinde cesitli operasyonlar yaparak ulasiriz.
print $isim; # Ekrana $isim degiskeninin degerini basar.
Degiskenleri, bilgisayar hafizasindaki bölgeleri adresleyen isimler olarak düsünebiliriz. Bu alanlara veriler yerlestirilir. Yerlestirilen verileri bulmak icin degisikenler kullanilir. Perl derleyisi program kodunu derleyebilmek icin, degiskenlerin hangi veritipine sahip oldugunu bilmek zorundadir. Derleyici, veritiplerini kontrol ederek, degiskenler üzerinde yapilacak operasyonlari kararlastirir. Skalar veritipine sahip degiskenleri daha önce tanidik. Buna göre skalar olan bir degisken rakam, harf ya da kelime cinsinden veri icerebilir:
$sayi=1224; $isim="Mehmet"; print $isim; # Ekrana $isim degiskeninin degerini basar.
PERL"E DERSLERİ - 2
Perl dilinde kullanilan degiskenlerin özelliklerini söyle siralayabiliriz: " Diger dillerin aksine Perl dilinde degiskenleri kullanmadan önce tanimlamak zorunlulugunuz yok. Degiskeni kullanmak istediginiz yerde tanimlayarak, program icinde kullanabilirsiniz. " Skalar degiskenlerin hangi veritipine sahip olduklarini belirtmeniz gerekmiyor. " Degiskenler sayi ya da string cinsinden veri icerebilirler. " Ayni degiskenin cesitli satirlarda sayi ve string ihtiva etmesi mümkün:
$var=1224; print $var; $var="Mehmet"; print $var;
" Eger yapilan operasyon onu gerektiriyorsa, sayi iceren bir degisken stringe ya da bir string sayi tipine cevrilebilir: Eger bir stringin baslangicinda sayi varsa, baslangictan sayinin bitimine kadar string bir rakama cevrilir. Baslangicinda rakam olmayan stringler 0 olarak rakam tipine cevrilir.
$var=" Net Sok. Netyardim Cad."; $nr=$var + 1; print $nr; # Ekrana 1225 sayisini basar.
" Degisken kullanirken yapilan en fazla hatalardan birisi, yazim hatalari sonucu birbirinden degisik iki degisken tanimlanmasidir.
$benim_degiskenim=1234; $benim_degiskeni +=1; print $benim_degiskenim;
Burada ekrana basilacak sonuc 1234 dür. Istemesekte yazim hatasi oldugu icin $benim_degiskeni ismi altinda ikinci bir degisken yarattik. Yaptigimiz toplama islemi yeni yaratilan degisken üzerinde gecerli oldugu icin, print komutu $benim_degiskenim degiskeninin degeri olan 1234 rakamini ekrana basar. Yazim hatasi sonucu istenmeyen degisken yaratmamak icin program basinda use strict; komutunu kullanabilirsiniz. Use strict, komutundan sonra kullanmak istediginiz her degiskeni my $degiskenim seklinde tanimlamaniz gerekmektedir. Bu sayede yazim hatasi sonucu baska bir isimde degisken yaratmaniz mümkün olmayacaktir.
use strict; my $var; $var=13; $var2=33; # derleyici, $var2 isminde bir degiskeni my # kullanarak tanimlamadiginiz icin hata verecektir. print $var;
Array birden fazla skalar degiskenin yer aldigi bir listedir.
@array=(1,2,3,4,"Mehmet",5,6); @array2=@array; @array=(); # Bos bir liste....
Liste elemanlarini cesitli yöntemler kullanarak ekrana basmak mümkündür:
print @array; # 1234Mehmet56 print "@array\n"; # 1 2 3 4 Mehmet 5 6
İsterseniz belirli liste elemanlarini da ekrana basabilirsiniz:
print $array[0]; # Ekrana 1 rakamini basar.
Burada dikkat edilmesi gereken iki husus var: Liste icinde bulunan elemanlar 0 dan baslayan indexle adreslenir. Buna göre listenin ilk elemanini ekrana basmak istiyorsaniz, index numarasi olarak 0 yazmaniz gerekiyor. Listenin tümünü degilde belirli elemanlarini islemek istiyorsak o zaman @ yerine $ kullanmamiz gerekiyor. Daha öncede acikladigim gibi skalar degiskenler icin $ isareti kullanilir. Eger listenin belirli elemanlarina ulasacaksaniz o zaman $ kullanmaniz gerekmektedir, cünkü listenin bir parcasi olan eleman sonucta bir skalar degerdir.
print $array[$#array]; # Ekrana listenin son elemanini basar...
Yukarda kullanilan teknikler disinda döngü kullanarak, liste elemanlarini ekrana basabiliriz: foreach $elem (@array) { print $elem; }
Döngüleri kitabin ilerdeki bir bölümünde detayli olarak inceleyecegiz. Bir önceki bölümde listeleri (array) tanidik. Listenin cesitli elemanlari üzerinde operasyon yapabilmek icin bir index numarasiyla bu elamani adreslememiz gerekiyor. Liste elemanlarini 0,1,2,3.... seklinde belirli bir siraya sahiptir. Perl dilinde cok sik kullanilan ve HASH olarak isimlendirilen özel bir liste tipi vardir. Arraylerin aksine HASH tipi bir listenin elemanlarini adreslemek icin belirli bir sirayi takip etmemiz gerekmiyor. Asagida HASH tipi bir liste görüyorsunuz:
%HASH=(); # Bos die HASH tanimlar. %HASH_LISTE=("Ahmet" => 24, "Veli" => 30, "Ayse" => 23, "Orhan" => 18 );
HASH tipi listelerde yapilan kayitlar anahtar-deger esleri olarak saklanir.
Anahtar - Deger --------------------- Ahmet 24 Veli 30 Ayse 23 Orhan 18
Istedigimiz anahtari kullanarak, sahip oldugu degere ulasabliriz.
print $HASH_LISTE{"Mehmet"}; # Ekrana 24 rakamini basar.
Listeye yeni bir anahtar-deger esi eklemek istiyorsaniz:
$HASH_LISTE{"Deniz"}=21;
Burada dikkat edilmesi gereken husus, daha öncede belirttigim gibi $ isaretinin kullanilmasidir. Liste elemanlari skalar cinsten degisken olduklari icin, belirli anahtar-deger üzerinde operasyon yaparken, bu liste elemanlarina $ isareti üzerinden ulasabiliriz.
foreach $anahtar (%HASH_LISTE) { print "$anahtar: $HASH_LISTE{"$anahtar"}\n"; }
Yukardaki örnegi uyguladiktan sonra, ekran cikisinda bir düzensizlik tespit edeceksiniz. Array tipi listelerde liste elemanlari, listede yer aldiklari sira numarasina göre isleme konur. HASH tipi listelerde, liste elemanlari belirli bir siraya sahip degildir. Listenin basinda yer alan bir anahtar-deger cifti ekrana listenin sonunda ya da ortasinda yer aliyormuscasina basilabilir. Perl derleyicisi HASH tipi listeleri degisik bir yöntemle hafizaya yerlestirdigi icin, liste icindeki anahtar-deger ciftlerinde belirli bir sira yoktur.
%HASH_LISTE{"Tarkan")=3; # Hata. Liste elemanlari skalar oldugu icin, elemamanlara # $ isaretiyle ulasmaniz gerekir. undef $HASH_LISTE{"Deniz"}; # Deniz anahtarinin degeri 21 silinir. # Buraya yeni bir deger eklenmedigi sürece, Deniz"indegeri belirsizdir. delete $HASH_LISTE{"Deniz"}; # anahtar-deger ciftini listeden siler.
Keys operatörünü kullanarak, HASH tipi bir listenin anahtarlarini array tipi bir listede toplayabiliriz:
@anahtarlar=keys %HASH_LISTE; foreach $elem (@anahtarlar) { print $elem; }
Yukardaki örnek HASH_LISTE sinde bulunan tüm anahtarlari (Ahmet, Veli,Ayse, Orhan) @anahtarlar listesine yerlestirir. Foreach döngüsüyle tüm anahtarlari ekrana basabiliriz. Sort keys operatörü HASH tipi bir listenin anahtarlarini alfabetik siraya göre array tipi bir listeye yerlestirir.
@anahtarlar=sort keys %HASH_LISTE; foreach $elem (@anahtarlar) { print $HASH_LISTE{$elem}; } foreach $anahtar (sort keys %HASH_LISTE) { print $HASH_LISTE{$anahtar}; }
Array ve HASH tipi listeler PERL dilinde sikca kullanilir. Isterseniz simdi bir HASH kullanarak ilk programimizi yazalim. Programimiz klavye üzerinden girilen bir cümle icindeki kelimelerin kac kere kullanildigini sayacak.
# sayac.pl ####################################### $cuemle=<STDIN>; chop($cuemle); @kelimeler=split(/\s/, $cuemle); foreach $elem (@kelimeler) { $HASH{$elem}++; } foreach $anahtar (sort keys %HASH) { print "$anahtar: $HASH{$anahtar}\n"; }
Program nasil calisiyor?
" <STDIN> ile klavye üzerinden girilen verileri degiskenler kullanarak saklayabilrsiniz. kullanilan bir program, klavye üzerinde herhangi bir string ya da rakam girmenizi bekler. Girilen veri $cuemle degiskenine esitlenir. Programin ilerleyen satirlarinda $cuemle degiskenini kullanarak, klavye üzerinden girilen veriyi isleyebiliriz. " chop fonksiyonu satir sonunda girilen return (\n) isaretini uzaklastirir. " @kelimeler=split(/\s/, $cuemle); satiri, girdiginiz cümle icindeki kelimeleri @kelimeler listesine yerlestirir. \s kelimeler arasindaki bos alandir. Split fonksiyonu, cümleyi bosluk alanlarin oldugu yerden kelimelere böler. Buna göre @kelimeler listesinin elemanlari cümle icinde gecen kelimler olacaktir. " Foreach döngüsünü kullanarak bir HASH yardimiyla her kelimenin kac kere kullanildigini tespit ediyoruz. Cümle icinde gecen her kelime HASH icinde anahtar olarak kullaniliyor. Döngüyü kullanarak her anahtar kelimenin kac kere kullanildigini, bu anahtarin deger kismina yerlestiriyoruz. ($HASH{$elem}++;) ++ operasyonu deger bölümünde bulunan sayiyi bir arttirilacaktir. Buna göre eger bir kelime daha önce kullanilmissa, deger hanesindeki sayi bir arttiracaktir. Eger kelime ilk defa kullaniliyorsa HASH icinde bir anahtar-deger cifti yaratilir ve anahtar hanesine kelime ve deger hanesine 1 konur.
" Sayma islemi bittikten sonra bir döngü yardimiyle anahtar-deger ciftleri ekrana basilir. Tipik bir ekran cikisi söyle olabilir:
Girdigimiz cümle: Bugün hava cok iyi. Bugün kendimi cok iyi hissediyorum. Ekran cikisi: Bugün: 2 cok: 2 hava:1 hissediyorum: 1 iyi: 1 iyi. : 1 kendimi: 1
|