|
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 |