İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır

Koşul ve Kontrol Deyimleri -- Dallanma ve Yönlendirme

1. if Deyimi :

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.

IF ve ELSE kullanarak dallanma:

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.

>

ÇOKLU DALLANMA if-elsif-else kullanımı:

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.

>

Tek satırlı şart ifadesi

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

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

}

FOREACH döngüsü ---- Liste ve Dizi elemanlarını okuma

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.

DO DEYİMİ:

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

>

LAST deyimi:Döngüden çıkışı sağlar.

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

>

NEXT deyimi : Döngüde, Bir sonraki dönüşe atlatır.

Ö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

REDO DEYİMİ : Döngüdeki bir dönüşü yeniden başlat

Ö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

>

VERİLEN ETİKETE GİTME :

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
>

CONTİNUE bloğu:

Ö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 etiket deyimi:

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
>

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır