|
|
if ($sayı) { print ("Sayı sıfır değil..\n"); }
Yukarda bir if deyimli perl program parçası görüyorsunuz. if deyimi yanında () parentez içersindeki değer veya değişken sınanır.Parantezler arası bu kısım şart ifadesidir (Örneğimizde ($sayı). Bu ifadenin içerdiği sonuç doğru ise oklu parentezler (Blokbaşı ve sonunu ifade eder ki kullanılması şarttır) içerisindeki kısım blok olarak icra edilir. Sonuç yanlış ise Blok dışına geçilir. Sonucun doğru(true)olması demek parentez içi değerin 0 olmaması demektir. Değer 0 ise sonuçyanlıştır (false).
Örnek Program : Program adı ifprg.pl olsun
Göster Gizle Kopar Satır Gizle Satır Göster |
#!/usr/local/bin/perl print ("Bir sayı giriniz:\n"); $sayi = <STDIN>; #Program calıştığında burada 7 girelim chop ($sayi); if ($sayi) { print ("Girilen sayı sıfır değil.\n"); } print ("Program sonu...\n");
Çalışması:
>ifprg >Bir sayı giriniz: >7 >Girilen sayı sıfır değil. >Program sonu...
if deyiminin koşul ifadesi kısmında karşılaştırmalarda yapılır.Örnek :
if ($sayi == 5) { .... }
Yukarıdaki ifadede $sayı değişkenindeki değerin 5'e eşit olup olmadığı sınanmaktadır. == göstergesi eşitlik anlamındadır. Buna benzer şekilde büyük ve küçüklük sınamaları da yapılır. Ör:
if ( $sayi > 5 ) ..
Bu kullanımda sınama sonucu ne ise ona göre işlem yapılır.
Örneğin, sonuç doğru ise oklu parantez içindeki blok icra edilir. Aksi takdirde doğrudan blok dışına atlanır.
Örnek program : Program adı ifprg2.pl olsun,
Göster Gizle Kopar Satır Gizle Satır Göster |
#!/usr/local/bin/perl print ("Sayı gir:\n"); $sayi1 = <STDIN>; chop ($sayi ); print ("Başka bir sayı gir:\n"); $sayi2 = <STDIN>; chop ($sayi2); if ($sayi1 == $sayi2) { print ("Girilen iki sayı eşit.\n"); } print ("Program sonu.\n");
Çalışması :
>ifprg2 >Sayı gir: >17 >Başka bir sayı gir: >17 >Girilen iki sayı eşit. >Program sonu.
Genel format :
if (koşul) { Koşul doğruysa icra edilen kısım; } else{ Koşul yanlışsa icra edilen kısım; }
Örnek program : program adı ifprg3.pl olsun
Göster Gizle Kopar Satır Gizle Satır Göster |
#!/usr/local/bin/perl print ("Bir sayı giriniz:\n"); $sayi1 = <STDIN>; chop ($sayi1); print ("Baska bir sayı giriniz:\n"); $sayi2 = <STDIN>; chop ($sayi2); if ($sayi1 == $sayi2) { print ("Iki sayı eşittir.\n"); } else { print ("Iki sayı eşit değildir.\n"); } print ("Program sonu.\n");
Çalışması ;
>ifprg3 >Bir sayı giriniz: >17 >Baska bir sayı giriniz: >18 >Iki sayı eşit değildir. >Program sonu. >
Genel Formatı :
if (koşul1) { koşul1 dogru ise icra edilir } elsif (koşul2) { koşul2 dogru ise icra edilir } elsif (koşul3) { koşul3 dogru ise icra edilir ... } else { Hiçbir koşul doğu değil ise icra edilir }
Örnek program: Program adı ifprg4.pl olsun
Göster Gizle Kopar Satır Gizle Satır Göster |
#!/usr/local/bin/perl print ("Bir sayı giriniz:\n"); $sayi1 = <STDIN>; chop ($sayi1); print ("Baska bir sayı giriniz:\n"); $sayi2 = <STDIN>; chop ($sayi2); if ($sayi1 == $sayi2) { print ("Sayılar eşit.\n"); } elsif ($sayi1 == $sayi2 + 1) { print ("Birinci sayi 1 buyuk.\n"); } elsif ($sayi1 + 1 == $sayi2) { print ("Ikinci sayi 1 buyuk.\n"); } else { print ("Sayilar eşit değil.\n"); } print ("Program sonu.\n");
Çalışması:
>ifprg4 >Bir sayı giriniz: >17 >Baska bir sayı giriniz: >18 >Ikinci sayi 1 buyuk. >Program sonu. >
Daha evvel if ifadesini şöyle kullanmıştık,
if ($var == 0) { print ("Bu sıfırdır.\n"); }
Bu ifadeyi tek satırda gösterme özelliği de vardır.
print ("Bu sıfırdır.\n") if ($var == 0);
her iki örnekte aynı işleve sahiptir.Bu biçim unless,until,while gibi şart ifadelerinde de kullanılır. Ör:
print ("Bu sıfırdır.\n") unless ($var != 0); print ("Henüz sıfır değil.\n") while ($var-- > 0); print ("Henüz sıfır değil.\n") until ($var-- == 0);
Tek satırlı komut kullanımlarında özellikle döngü değeri artış ifadelerinde hata yapma ihtimali olduğundan bu tip ifadeler de dikkatli kullanılmalıdır. Örneğin,
$count = 1; print ("$say\n") while ($say++ < 5);
ifadelerinde ekrana basılan ilk değer 2 dir.1 değildir. v.b.... Örnek program : Adı:whprg1.pl olsun
Göster Gizle Kopar Satır Gizle Satır Göster |
#!/usr/local/bin/perl $say = 0; print ("$say\n") while ($say++ < 5);
Çalışması :
>whprg1.pl 1 2 3 4 5 >
For döngüsü kullanımını bildiğiniz bir döngü çeşididir. Genel format:
for (ilk değer ataması; koşul; sayac arttırma) { komut satırları bloğu }
Örnekle inceleyelim program adı forprg1.pl olsun
Çalışması :
Göster Gizle Kopar Satır Gizle Satır Göster |
#!/usr/local/bin/perl for ($sayi=1; $sayi <= 5; $sayi++) { print ("$sayi\n"); } # 1.ilk değer atanır # 5 ten kucuk veye eşit mi? sorusunun cevabı evet ise döngüye girilir # sayı yazdırılır # sayac 1 arttırılır ve tekrar koşul sınanır. # koşul sonucu evet ise işlem bir önceki gibi devam eder,hayır ise döngü dışına çıkılır.
For dögülerinde bazen her bir değer artışından(döngü sayacı) evvel birden fazla komut uygulamak gerekebilir. Bu durumda for döngüsünde , (virgül) kullanılır. Örneğin aşağıdaki program parçasını inceleyelim ve aynı işlemleri for ile nasıl kullandığımızı görelim.
$satir = <STDIN>; $say = 1; while ($say <= 3) { print (satir); satir = <STDIN>; $say++; }
Bu satırlarla yapılanı for ile gerçekleştiren programın kodu aşağıdadır.
Göster Gizle Kopar Satır Gizle Satır Göster |
#!/usr/local/bin/perl for ($satir = <STDIN>, $say = 1; $say <= 3; $satir = <STDIN>, $say++) { print ($satir); }
Genel formatı:
foreach localdeğişken (liste-dizi) { deyimler grubu; }
foreach dizilerden kolaylıkla eleman almak amacıyla kullanılan, perl'e has bir zenginliktir. Diziden liste elemanı local değişkene atanır.Her dönüşte sıradaki liste elemanı alınır. Bu deyim programlarda çok kullanılır.Örnek program : Program adı forprg2.pl olsun
Göster Gizle Kopar Satır Gizle Satır Göster |
#!/usr/local/bin/perl @words = ("Bu", "bir", "liste", "dir."); foreach $word (@words) { print ("$word\n"); }
Çalışması:
>forprg2.pl Bu bir liste dir. >
Bir başka örnek program : forprg3.pl program ekrandan girilen satırdaki kelimeleri sıralar ve ters sıraya sokar ve basar.
Göster Gizle Kopar Satır Gizle Satır Göster |
#!/usr/local/bin/perl $line = <STDIN>; $line =~ s/^\s+//; $line =~ s/\s+$//; foreach $word (reverse sort split(/[\t ]+/, $line)) { print ("$word "); } print ("\n");
Çalışması:
> test icin bir satir girdim test satir icin girdim bir >
Çalışmanın Açıklaması:Önce split ile satirdaki kelimeler bölünür.
("test", "icin", "bir", "satir" , "girdim")
sonra bunlar sıralanır.(hazır fonksiyon olan sort ile) sıralama sonucu listenin durumu:
("bir", "girdim" , "icin", "satir" , "test")
Bir sonraki aşama da liste ters sırada sıralanır.(reverse hazır fonk.) listenin son durumu: ("test", "satir" , "icin", "girdim" , "bir") olur. Bu durumdaki liste ekrana basılır.
genel format:
do{ deyimler bloğu } while_veya_until (şart_ifadesi);
biçimindedir.
Örnek kullanım:
do { $line = <STDIN>; } while ($line ne "");
satır sonu değilse döngü devam eder. Aynı sonucu aşağıdaki kodlama da verir.
do { $line = <STDIN>; } until ($line eq "");
Buradaki şart ifadesinde ise satır içeriği boş olana(giriş yok) kadar döngüyü uygular. Örnek program : doprg.pl
Göster Gizle Kopar Satır Gizle Satır Göster |
#!/usr/local/bin/perl $sayac = 1; do { print ("$sayac\n"); $sayac++; } until ($sayac > 5);
>doprg.pl 1 2 3 4 5 >
Örnek program: lastprg.pl
Göster Gizle Kopar Satır Gizle Satır Göster |
#!/usr/local/bin/perl $toplam = 0; while (1) { $satir = <STDIN>; if ($satir eq "") { last; } chop ($satir); @sayilar = split (/[\t ]+/, $satir); foreach $sayi (@sayilar) { if ($$sayi =~ /[^0-9]/) { print STDERR ("$sayi sayi degil\n"); } $toplam += $sayi; } } print ("Toplam: $toplam.\n");
Çalışması:
>lastprg.pl 4 5 7 2 11 6 ^D Toplam: 35. >
Örnek Program: nex.pl
Göster Gizle Kopar Satır Gizle Satır Göster |
#!/usr/local/bin/perl print ("Toplam için son sınır sayısını gir:\n"); $limit = <STDIN>; chop ($limit); $say = 1; $toplam = $cifttoplam = 0; for ($say = 1; $say <= $limit; $say++) { $toplam += $say; if ($say % 2 == 1) { # sayı tek ise sonraki dönüşe atla next; } $cifttoplam += $say; } print(" 1 den $limit ye kadar olan sayıların toplamı: $toplam\n"); print("Bu sınırdaki çift sayıların toplamı ise: $cifttoplam\n");
Çalışması:
>nex.pl Toplam için son sınır sayısını gir: 7 1 den 7 ye kadar olan sayıların toplamı: 28 Bu sınırdaki çift sayıların toplamı ise: 12 >
Bir başka next örneği içeren program: nex2.pl. Bir kelime sayma programıdır.
Göster Gizle Kopar Satır Gizle Satır Göster |
#!/usr/local/bin/perl $toplam = 0; while ($satir = <STDIN>) # kelime girişi yap, ctrl+d ye basılırsa döngüden çıkılır { $satir =~ s/^[\t ]*//; # baştaki boşluk ve tabları at $satir =~ s/[\t ]*\n$//; # sondaki boşluk,tab ve \n karakterlerini(yeni satır) at next if ($satir eq ""); #satır boşsa sonraki dönüşe atla @kelimeler = split(/[\t ]+/, $satir); # kelimeleri aralarındaki # boşluk ve tab'lardan # ayırarak diziye yerleştir $toplam += @kelimeler; # dizi boyutundan elde edilen eleman (kelime) # sayısı değerini tut } print ("Toplam kelime sayısı: $toplam\n");
Çalışması:
>nex2.pl Bir kac kelime girelim program kelime sayısını versin. ^D Toplam kelime sayısı: 8
Örnek programla inceleyelim. redoprg.pl
Göster Gizle Kopar Satır Gizle Satır Göster |
#!/usr/local/bin/perl $toplam = 0; for ($say = 1; $say <= 3; $say++) { $satir = <STDIN>; last if ($satir eq ""); $satir =~ s/^[\t ]*//; $satir =~ s/[\t ]*\n$//; redo if ($satir eq ""); @kelimeler = split(/[\t ]+/, $satir); $toplam += @kelimeler; } print ("Toplam kelime sayısı: $toplam\n");
Çalışması:
>redoprg.pl Test satırı. Bu da ikincisi. ^D Toplam kelime sayısı: 5 >
Bazen dallanmalarda programın herhangi bir bölümüne atlamamız gerekir. Bu bölümlere ulaşmak için bölüme ait etiket adı veriler.Aşağıda kullanılan
DONE: sintaksı bir etiketi belirler. next ve redo ile de etiket kullanılır. (redo etiket; gibi) .
Örnek program : etprg.pl
Göster Gizle Kopar Satır Gizle Satır Göster |
#!/usr/local/bin/perl $toplam = 0; $ilksayac = 0; DONE: while ($ilksayac < 10) { $ikincisayac = 1; while ($ikincisayac <= 10) { $toplam++; if ($ilksayac == 5 && $ikincisayac == 9) { last DONE; } $ikincisayac++; } $ilksayac++; } print ("$toplam\n");
Çalışması:
>etprg.pl 59 >
Örnek görerek anlamaya çalışalım:
$i = 1; while ($i <= 10) { print ("$i\n"); } continue { # continue bir blokla kullanılır ({ } arasında) $i++; }
Yukardaki örnekte continue bloğundaki $i++ aşağıda for bloğundaki görevi yapar.
for ($i = 1; $i <= 10; $i++) { print ("$i\n"); }
Her iki örnekteki çalışma aynıdır.continue genelde while ve until ile kullanılır. for da buna gerek yoktur.
go to yanında belirtilen etikete program akışını yönlendirir. etiket, do veya altyordam(sub) içinde tanımlı olmamalıdır. Ör:
Göster Gizle Kopar Satır Gizle Satır Göster |
#!/usr/local/bin/perl NEXTLINE: $line = ; if ($line ne "") { print ($line); goto NEXTLINE; }
Çalışması:
bu bir satırdır. bu da bir satırdır. ^D >
|
|