ALT PROGRAMLAR -subroutin-

 

Alt programlar fonksiyon veya altyordam olarak da bilinen ve ana programdan çağrılarak devreye sokulan program parçalarıdır.Programların takibi ve anlaşılabilirliği ve kodlama işlemini en aza indirmesi  açısından çok yararlıdırlar.Alt programlara ana programdan değer göndermeksizin herhangi bir işlev yürütülebildiği gibi değer gönderilip dönüşte değer de alınabilir.Programın herhangi bir yerinde tanımlanabilirler. Ancak genel kabul gören kullanım  programın baş veya son kısımlarında tanımlanmalarıdır. Alt programlar sub ifadesiyle belirtilirler.Ana programdan çağrılacakları zaman ise alt programın adı verilir.

Alt program adının başında & karakteri bulunur.

Öneklersek,alt program adı yaz ise, çağırma kodu: &yaz  dır.Alt program tanım satırı ise

En sade şekliyle       sub yaz{};       biçimindedir

 

Şimdi örneklerle konuyu daha iyi anlamaya çalışalım.

 

 

    Örnek :

                                                                                                          Program akış sırası

            #!/usr/local/bin/perl                                                                                       1

            $toplam = 0;                                                                                                  2

 

&sayilarial;     # bu satıra gelindiğinde  alt program devreye girer                              3

                   # alt program satırlarının tamamı icra edildikten sonra

                   # program akışı tekrar buraya döner ve

                  # alt satırdan(foreach ..) devam eder

                  # ana programın son satırı toplam değerin yazdırıldığı

                  # print("Girisi ....   satırıdır.İcra burada biter.

       

foreach $sayi (@sayilar){                                                                                8

$toplam += $sayi;}                                                                                         9

print("Girisi yapilan sayilarin toplami: $toplam \n");                                        10

# Burası ana program sonudur

 

sub sayilarial {                                                                                             4

           $degergir=<STDIN>;                                                                                       5

           $degergir =~s/^\s+|\s*\n$//g;                                                                       6

           @sayilar=split(/\s+/,$degergir);                                                                      7

            }

 

Çalışması :  program.pl     

 

2 45 67 89

Girisi yapilan sayilarin toplami: 203

 

Not:Alt program bir kez tanımlandıktan sonra altprogram çağırmak için baştaki & karakterini

Kullanmasak da perl onun alt program olduğunu anlar.

Örnek :

#!/usr/local/bin/perl

sub satiroku {

$satir=<STDIN>;

}

 

print ("merhaba henuz alt program calismadi\n");

&satiroku;

print ("& karakteri kullandigimiz alt program satiri: $satir\n");

 

satiroku;

print ("& karakteri kulanmadan ayni alt program su satiri okudu: $satir\n");

                       

Çalışması : program.pl  

  

merhaba henuz alt program calismadi

ilk satir

& karakteri kullandigimiz alt program satiri: ilk satir

 

ikinci satir

& karakteri kulanmadan ayni alt program su satiri okudu: ikinci satir

 

 

 

Alt Yordamdan Değer Döndürme :

 

 

Örnek :

#!/usr/local/bin/perl

$toplam=0;

@sayilar=&sayilarial;

foreach $sayi (@sayilar) {

        $toplam +=$sayi;

        }

        print ("Toplam: $toplam\n");

sub sayilarial {

        $satir=<STDIN>;

        $satir=~ s/^\s+|\s*\n$//g;

        split(/\s+/, $satir);            #dönüş değeri

}

 

Çalışması : program.pl     

12 23 34        1

Toplam: 70

 

Dönüş değerleri daha sonra bir ifade içinde de kullanılabilir.

 

Örneğin :

            Foreach $sayi (&sayilarial); {

            Print (“$sayi\n”);

            }

 

 

Return Deyimi :

 

            Bu deyim alt yordamdan değer döndürmenin bir başka yoludur.

Biçimi:     return (dönüş_değeri);

 

Örnek :

#!/usr/bin/perl

 

$toplam = &toplam_al;

 

if($toplam eq "Hata") {

print("Deger alinamadi .\n");

  }

else

{

print ("Toplam : $toplam.\n");

}                      # ana program sonu

 

sub toplam_al {

$deger = 0;

$gir = <STDIN>;

$gir =~ s/^\s+|\s*\n$//g;

if ($gir eq "") {

       return ("Hata");

}

@alt_kelimeler = split(/\s+/, $gir);

$indeks = 0;  

 

while ($alt_kelimeler[$indeks] ne ""){

        $deger += $alt_kelimeler[$indeks++];

}      

$donus_degeri=$deger;           # $donus_degeri içeriği ana programda

                                               # $toplam içine aktarılacak

}                                              # alt program sonu

 

Çalışması : program.pl

12        23

Toplam : 35.

 

program.pl

^D

Deger alinamadi .

 

 

my() ve local() hazir fonksiyonları kullanımı:

 

Bu fonksiyonlar alt programlarda kullanılır ve sınırlı kullanım alanı olan değişken yaratırlar.Parantez içinde ifade edilen bu değişkenlerin kullanımlarını inceleyecek olursak,

My() ile oluşturulup kullanılan değişkenleri sadece  ait olduğu alt programlar kullanır atama yapabilirler.Çalışma suresince değişken içeriği bu alt programda aynı kalır. local() ise o alt

Program tarafından çağrılan diğer alt programda da kullanılabilir.Konuyu anlamak için aşağıdaki programın çalışmasını incelemeniz yararlı olacaktır.

 

Örnek:

 

#!/usr/bin/perl

 

ilk_alt_program("Ertan", "Bertan");

 

sub ilk_alt_program {

                     local ($degisken1) = $_[0]; # "Ertan" atanıyor

                     my($degisken2)    = $_[1]; # "Bertan" atanıyor

                     print("ilk_alt_program: degisken1  = $degisken1\n");

                     print("ilk_alt_program: degisken2 = $degisken2\n\n");

                     ikinci_alt_program();

                     print("ilk_alt_program: degisken1  = $degisken1\n");

                     print("ilk_alt_program: degisken2 = $degisken2\n\n");

                      }

                 

sub ikinci_alt_program {

                    print("ikinci_alt_program: degisken1  = $degisken1\n");

                    print("ikinci_alt_program: degisken2 = $degisken2\n\n");

                    $degisken1  = "Ahmet";

                    $degisken2 = "Mehmet";

                     print("ikinci_alt_program: degisken1  = $degisken1\n");

                     print("ikinci_alt_program: degisken2 = $degisken2\n\n");

                     }

 

Çalışması:  program.pl

ilk_alt_program: degisken1  = Ertan

ilk_alt_program: degisken2 = Bertan

 

ikinci_alt_program: degisken1  = Ertan

ikinci_alt_program: degisken2 =

 

ikinci_alt_program: degisken1  = Ahmet

ikinci_alt_program: degisken2 = Mehmet

 

ilk_alt_program: degisken1  = Ahmet

ilk_alt_program: degisken2 = Bertan

 

 

ALT PROGRAMLARDA    @_     KULLANIMI:

 

@_ sistem dizi değişkeni alt programlarda kullanılır ve ana programdan gelen değerleri(parametreleri) içerir.Perl programlarında çok sık kullanılır. @_ içeriği   aslında yukardaki örnekte gördüğümüz  $_[0] , $_[1] değişkenlerini içeren bir sistem dizi değişkenidir.Bu durumu çok iyi

gösteren aşağıdaki programı inceleyiniz.

 

Örnek program:

 

#!/usr/bin/perl

print ("Ana program basladı.Henüz alt program devrede değil\n");

ilk_alt_program("Ertan", "Bertan"."Ahmet");

print ("Alt programdan dönüldü...Program sonu !\n");

 

sub ilk_alt_program {

       print ("Şimdi alt programdayiz ve ana programdan gelen değerler aşağıda\n");

       local ($a1,$a2,$a3) = @_;

       print("$a1,$a2,$a3\n");

       print("$_[0],$_[1],$_[2]. \n");

 

Çalışması : program.pl

 

Ana program basladı.Henüz alt program devrede değil

Şimdi alt programdayiz ve ana programdan gelen değerler aşağıda

Ertan,BertanAhmet,

Ertan,BertanAhmet,.

Alt programdan dönüldü...Program sonu !

 

 

 

 

Bir başka örnek program:

 

#!/usr/local/bin/perl

parametre_say(1, 2, 3, 4, 5, 6);

parametre_say("A".."Z");                  

 

sub parametre_say {       

$parametre_adedi = @_ ;            

print("Parametre Adedi: $parametre_adedi\n");                              

 

CALIŞMASI: program.pl

 

Parametre Adedi: 6

Parametre Adedi: 26