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