GiRİŞ Perl Komutları Nasıl Yazılır?



Yüklə 0,83 Mb.
səhifə7/7
tarix02.11.2017
ölçüsü0,83 Mb.
#26951
növüYazı
1   2   3   4   5   6   7

REFERANSLAR

Giriş

Referans herhangi bir diziye, değişkene, altprograma işaret koymaktır denilebilir. Bir referans, bir değer için adrestir. Referanslar karışık data yapıları oluşturmada çok faydalıdırlar. Karışık data yapılarını gerçekte referanssız tanımlayamazsınız.

Perl5 hard ve sembolik referanslar sunar. Bir sembolik referans; değişken adını içerir. Sembolik referanslar değişken adı yaratmak ve onları çalışma anında adreslemek için çok yararlıdırlar. Temel olarak sembolik bir referans bir file adına benzer veya UNIX’ deki soft link gibidir. Hard referans ise hard linkler gibidirler. Sadece aynı yere bir başka yoldur. Hard referanslar referans sayısını izler bu sayı 0 olunca başvurulan yeri serbest bırakır.

Referansları Kullanma :

Bir skalar değer bir değişkene başvursun. $gosterge. Herhangi bir skalar bir hard referans tutabilir. Çünkü diziler hash'lar(bileşik diziler) skalar içerirler . Bunları dikkate alarak kompleks yapılar inşa edilebilir.

$gosterge'nin değerini, bir diziye gösterge olarak kullanmak için dizi içindeki maddeye başvurulur. Şu notasyonla : @$gosterge. Bu kullanım kabaca, $gosterge nin adresini alır ve onu bir dizi olarak kullanır şeklinde anlaşılabilir. Benzer şekilde hash’lar (Bileşik Dizi) için %$gosterge gösterimini kullanırız. Bu durum hash'ın ilk elemanına işaret koyarız anlamındadır

Backslash (\) Operatörü Kullanımı :

Bir operatörün adresini geçirmek için kullanılır. Genelde değişkene ikinci bir yeni referans yaratma amacıyla kullanılır.

$degisken = 10;
$gosterge = \$degisken;

Burada; $gosterge, $degisken in değerini (10) içeren yere işaret koyar(referans verir). $degisken içindeki değeri $gostergeden alabilirsiniz hatta $degisken yok olsa dahi. Burada çalışan hard referanstır. $gosterge değişkeni , $degisken'in adresini içerir onun değerini değil.Değere erişmek için iki adet $ ile refere($$gosterge ) edilir. Örnek :

#!/usr/bin/perl
$deger = "ertan";
$gosterge = \$deger;
printf "'\$deger' degiskeninin içindeki değer $deger olup, gösterge adresi: $gosterge\n";
printf "$gosterge memory adresindeki değer: $$gosterge\n";

Çalışması ;

$deger' degiskeninin içindeki değer ertan olup, gösterge adresi: SCALAR(0x80c1288)
SCALAR(0x80c1288) memory adresindeki değer: ertan

Referans ve Diziler :

Perl konusunda belki en önemli nokta tüm @dizi ve %hash lar tek boyutludur ve skalar değer tutarlar ve direkt olarak dizi ve karmaşık data yapıları içermezler. Bir dizi elemanı sayı veya referans dır. Backslash operatörü ( \ ) ile skalar değişken gibi kullanılırlar. Örnek :

#!/usr/bin/perl
$gosterge = \@ARGV;
printf "\n ARGV nin gösterge(pointer) Adresi = $gosterge \n";
$i = scalar(@$gosterge);
printf "\n Argüman sayısı : $i \n";
$i = 0;
foreach (@$gosterge) {
printf "$i : $$gosterge[$i++];\n";
}

Çalışması ;

program.pl 1 2 3 4

ARGV nin gösterge(pointer) Adresi = ARRAY(0x806c378)


Argüman sayısı: 4
0 : 1;
1 : 2;
2 : 3;
3 : 4;

Çalışması ;

Argüman sayısı: 0

Programda, komut satırından girilen değerleri saklayan @ARGV dizisi elemanları içeriği basılır.

2. satırda $gosterge referans olarak @ARGV’ye işaretlenmiştir(point). 3. satır ARGV’nin adresini basar. Siz genelde bu adresi kullanmazsınız ama başka bir diziyi kullanabilirsiniz. O dizinin ilk elemanına erişim için bu adrese ulaşmak kısa yoldur. $gosterge pointer'i dizinin ilk elemanının adresini döndürür. 74 satır scalar () fonksiyonu çağırır ve (skalar değişken tipi ile karıştırmayınız) Dizideki eleman sayısına erişir. @ARGV'ye parametreler geçirilmiştir ama scalar() tarafından istenen $gosterge pointerinin tipini tanımlamak gerekir. Bu sebepten @$pointer kullanarak bir dizi olarak parametre tipi tanımlanır. Bu durumda $gosterge tipi dizi için bir pointerdir. @$pointer in ilk elemanıın adresi bu durumda $pointer ile elde edilmiş olur. Onun eleman sayıları scalar () ile döndürülür.

Bileşik dizilerde (hash) de \ operatörü kullanılabilir.Aşağıdaki örnekte Bileşik dizilerde kullanımı görelim. Örnek :

Çalışması ; program.pl

Aylar Bileşik dizisinin adresi = HASH(0x80c1294)


01. Ay = Ocak
02. Ay = Subat
03. Ay = Mart
04. Ay = Nisan
05. Ay = Mayis
06. Ay = Haziran
07. Ay = Temmuz
08. Ay = Agustos
09. Ay = Eylul
10. Ay = Ekim
11. Ay = Kasim
12. Ay = Aralik

ÇOK BOYUTLU DİZİLERDE REFERANS :

Kare, köşeli parantez kullanılır. Genel formatı;

$diziReferans->[$indeks] ........tek boyutlu dizi
$diziReferans->[$indeks1][$indeks2] ........iki boyutlu dizi
$diziReferans->[$indeks1][$indeks2][$indeks3] ........üç boyutlu dizi

şeklindedir. Örnek :

#!/usr/bin/perl
0 1 2,0 2,1 2,2 3,0 3,1 3,2
$tablo = ['Siyah', 'Beyaz', ['Kartal','2000','YILI'] , ['ſAMPİYONU', 'Puan', '100']];
print "\$tablo ->[0] = $tablo->[0] \n";
print "\$tablo ->[1] = $tablo->[1] \n";
print "\$tablo ->[2][0] = $tablo->[2][0] \n";
print "\$tablo ->[2][1] = $tablo->[2][1] \n";
print "\$tablo ->[2][2] = $tablo->[2][2] \n";
print "\$tablo ->[3][0] = $tablo->[3][0] \n";
print "\$tablo ->[3][1] = $tablo->[3][1] \n";
print "\$tablo ->[3][2] = $tablo->[3][2] \n";
print "\n";

Çalışması ; program.pl

$tablo ->[0] = Siyah
$tablo ->[1] = Beyaz
$tablo ->[2][0] = Kartal
$tablo ->[2][1] = 2000
$tablo ->[2][2] = YILI
$tablo ->[3][0] = ŞAMPİYONU
$tablo ->[3][1] = Puan
$tablo ->[3][2] = 100

ALT YORDAMLARA REFERANS :

dir skalar veya dizinin bir maddesine referansla aynı tarzdadır. Aşağıdaki tipte ifade edilir.

$alt_prog_gosterge = sub {alt yordam bildirimleri} ;

referans tarafından alt yordam çağırmak için aşağıdaki tipte referans kullanmalısınız.

&$alt_prog_gosterge( parametreler);

Örnek :

Çalışması ; program.pl

2 4


2

5 6


5

Çok Boyutlu Dizilerle, Çalışmak İçin, Altyordam Kullanımı :

Örnek :

#!/usr/bin/perl
@isimler = (Ahmet,Bertan,Ertan);
@telefonlar = (2126840,2126841,2126842);
$say = 0;
&aktar_yazdir(\@isimler, \@telefonlar);
sub aktar_yazdir{
my ($ad,$tel) = @_;
foreach (@$ad) {
print "ad[$say] = " . @$ad[$say] . " " . "\ttel[$say] = ". @$tel[$say] ."\n";
$say++;
}
}

Çalışması: program.pl

ad[0] = Ahmet tel[0] = 2126840
ad[1] = Bertan tel[1] = 2126841
ad[2] = Ertan tel[2] = 2126842
Değişkenlerde alias kullanımı

Aşağıdaki tanımı inceleyelim.

sub altprogram1 {
local (*altdizi) = @_;
$dizi_uzunlugu = @altdizi;
}

altprogram1 içindeki *altdizi tanımı perl' e der ki: Gerçek liste üzerinde işlem yapmak yerine kopya yap. Bu altyordam, &altprogram1(*altdizi2); gibi bir ifadeyle çağırılınca perl, altdizi ile altdizi2'nin aynı dizi değişkene başvurmasını gerçekleştirir. Bir isim alias olarak verildiğinde, o ismi taşıyan tüm değişkenler alias kullanarak başvurmuş olurlar. Bu demektir ki,bu örnekte @altdizi ve @altdizi2 aynı diziye başvururlar. Şu iki ifade,

altprogram1(*altdizi);
local (*altdizi2) = @_;

şu ifadeye eşittir;

local (*altdizi2) = *altdizi;

her bir durumda, altdizi isminin alias' ı olarak altdizi2 tanımlanmıştır. Çünkü altprogram içindeki local tanımı *altdizi2 içerir ve altdizi2 ve altdizi sadece altprogram çalıştığında eşittir. Bir isim için şöyle bir alias tanımlarsak;

*altdizi2 = *altdizi;

ve bu ifade ana programın bir bölümünde ise, altdizi2, altprogramlar dahil tüm programda altdizi için bir alias olur. $altdizi2, @altdizi2 ve %altdizi2 (eğer tanımlıysa) değerleri kaybolur. Örnek programa bakalım:

#!/usr/local/bin/perl
*name2 = *name1;
$name1 = 14;
print ("$name2\n");

çalıştır



14

alias kullanımı karışık olduğundan kesin emin olmadıkça kullanılmamalıdır onun yerine değişken adını bir stringe koyup eval ile çalıştırmak tercih edilebilir. Örneğin;



$isim2 = '$isim1';
eval ("$isim2 = 14;"); # $isim1 içeriği 14 ' dür.
Yüklə 0,83 Mb.

Dostları ilə paylaş:
1   2   3   4   5   6   7




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin