|
|
Daha evvel temel operatörleri görmüştük. (Toplama:+, Çıkarma:-, Çarpma:*, Bölme:/) Şimdi ise üs alma ,mod (artık) ve unary operatörlerini görelim.
Üs alma için ** ,mod için % ,unary negation için - operatörü kullanılır.
Örnek:
$x = 2 ** 4 # 2x2x2x2 anlamındadır ..sonuçta $x içeriği 16 dır. $y = 2 ** 2 # $y içine 4 atanır. $x = 2 ** $y; # $x içine 2**4 yani 16 atanır.
Örnek program : Program Adı usprg.pl olsun
| Göster Gizle Kopar Satır Gizle Satır Göster |
#!/usr/local/bin/perl #program 2 rakamının girdiginiz deger olarak üssünü bulur print ("Kullanacaginiz üs degerini giriniz:\n"); $us = <STDIN>; chop ($us); print ("2 nin $us .üssü = ", 2 ** $us, "\n");
Çalışması :
>usprg.pl >Kullanacaginiz üs degerini giriniz: >16 >2 nin 16 .üssü = ", 65536 >
Negatif ve noktalı sayı kullanmak hataya sebep olur
-5) ** 2.5 ..gibi
Yine sınırları aşan sayılar da hataya neden olur
10 ** 999999 ..gibi
$x = 25 % 4;
Bu örnekte 25,4'e bölünür kalan(artık) 1’dir. Dolayısıyla $x 'in değeri 1’dir. İnteger olmayanlar integer'a(Tamsayı) dönüştürülür
$x = 24.77 % 4.21;
Bu örnekte 24, 4'e bölünür kalan olmadığından $x değeri 0 dır.
MOD işlemlerinde % işaretinin sağında 0 olamaz çünkü sıfıra bölme imkansızdır. Bu tür işlemler hata mesajı verir.
$x = 25 % 0; $x = 25 % 0.1;
- operatörü
Değeri -1 ile çarpmaktır.
- işareti bu operatör ile kullanımında eksi işareti anlamında değildir.
- 5; # tamsayı -5' e esittir - $y; # $y * -1 anlamındadır.
Ayrıca -operant (azaltma),+operant (arttırma), kullanım öncesi arttırma ++operand, kullanım öncesi eksiltme –operand kullanım sonrası arttırma operand++, kullanım sonrası elsiltme operand--, operatörleri de kullanılır.
# Normal yol: $Sayfano = 5; $Sayfano = $Sayfano + 1; print($Sayfano, "\n");
program çıktısı : 6
#Önceden arttırmalı yol:
$Sayfano = 5; print(++$Sayfano, "\n");
program çıktısı : 6
Önceden eksiltmeli opr kullanımı.
$sayi = 5;
$toplam = --$sayi + 5;
print("$sayi $toplam \n");
Çıktı : 4 9
sonradan arttırmalı opr kullanımı.
$sayi = 5;
$toplam = $sayi++;
print("$sayi $toplam \n");
Çıktı : 6 5
$x = $a == $b;
Yukarıdaki satırda $x in değeri, $a ve $b daki değerlerin durumuna bağlıdır.
Şöyleki: eğer $a,$b ye eşitse, $a == $b eşitliği sonucu doğru değerini taşır(true) ve $x in değeri 0 OLMAZ. Sıfır olmayan değer taşır.eğer $a,$b ye eşit değilse, $a == $b eşitliği sonucu yanlış değerini taşır(false) ve $x in değeri 0 dır(Sıfır). Burada == operatörünün bir kıyas işlemi yaptığını görüyoruz. Kontrol ifadelerinde kıyas operatörleri sık sık kullanılır. örneğin;
if ($a == $b) {
print("$a eşittir $b\n");
}
Perlde, kıyas operatörleri 2 sınıfta kullanılır.
| Operatör | Açıklama |
| < | Küçük |
| > | Büyük |
| == | Eşit |
| <= | Küçük veya eşit |
| >= | Büyük veya eşit |
| != | Eşit değil |
| <=> | Kıyaslama dönüşü 1, 0, veya-1 |
$a değişkeninde 5 varsa
$a > 4 sonucu true (doğru) veya 0 olmayan değer $a > 7 sonucu false (yanlış) veya 0 dır.
<=> operatörü özel bir durum arz eder. Aşağıdaki 3 değerden birini döndürür.
0, Kıyaslanan iki değer eşitse 1, ilk değer büyükse -1, ikinci değer büyükse
| String operatör | Kıyas işlemi | Sayısal opr.karşılığı |
| lt | Küçük | < |
| gt; | Büyük | > |
| eq | Eşit | == |
| le | Küçük veya eşit | <= |
| ge | Büyük veya eşit | >= |
| ne | Eşit değil | != |
| cmp | Kıyaslama dönüşü 1, 0, veya-1 | <=> |
Örnekler :
$result = "aaa" lt "bbb"; # Doğru $result = "aaa" gt "bbb"; # Yanlış $result = "aaa" eq "bbb"; # Yanlış $result = "aaa" le "aaa"; # Doğru $result = "aaa" ge "bbb"; # Yanlış $result = "aaa" ne "aaa"; # Yanlış $result = "aaa" cmp "bbb"; # -1
Aşağıdaki örneklere bakalım.
$sonuç = "123" < "45"; # 123 ile 45 sayısal değer olarak kıyaslanır..sonuç yanlış(false) $sonuç = "123" lt "45"; # 123 ile 45 alfabetik değer olarak kıyaslanır sonuç doğru(true).
Bu sayılarda dikkat edilecek şey ondalık sonrasının net olmasıdır. Yuvarlanan sayı olursa sonuç hatalı çıkar. Ne demek istediğim aşağıdaki örnekten anlaşılacaktır.
| Göster Gizle Kopar Satır Gizle Satır Göster |
#!/usr/local/bin/perl $sayi1 = 14.3; $sayi2 = 100 + 14.3 - 100; print("sayi 1 : $sayi1, sayi 2 : $sayi2\n"); if ($sayi1 == $sayi2) { print("sayi 1,sayi 2 ye eşittir\n"); }else { print("sayi 1,sayi 2 ye eşit degildir\n"); }
Çıktı:
sayi 1 : 14.300000000000001, sayi 2 : 14.299999999999997
sayı 1, sayı 2 ye eşit değildir
Örnek:
$myval = $a || $b || $c;
aşağıdaki ifadeyle aynıdır
if ($a != 0) {
$deger = $a;
} elsif ($b != 0) {
$deger = $b;
} else {
$deger = $c;
}
Örnek :
$deger = $a && $b && $c;
ifadesi aşağıdakiyle aynıdır.
if ($a == 0) {
$deger = $a;
} elsif ($b == 0) {
$deger = $b;
} else {
$deger = $c;
}
Temel atama operatörü = göstergesidir. $a = 5; # 5 değeri $a değişkenin içine yerleştirilir.
| Operatör | İzah |
| var = op1; | op1,var 'a atanır(op1 değeri var içine yerleşir). |
| var += op1; | var + op1 ,var'a atanır. |
| var -= op1; | var - op1 ,var'a atanır. |
| var *= op1; | var * op1 ,var'a atanır. |
| var /= op1; | var / op1 ,var'a atanır. |
| var %= op1; | var % op1 ,var'a atanır. |
| var .= op1; | var. op1 ,var'a atanır. |
| var **= op1; | var ** op1 ,var'a atanır. |
| var x= op1; | var x op1 ,var'a atanır. |
| var <<= op1; | var << op1 ,var'a atanır. |
| var >>= op1; | var >> op1 ,var'a atanır. |
| var &= op1; | var & op1 ,var'a atanır. |
| var |= op1; | var | op1 ,var'a atanır. |
| var ||= op1; | var || op1 ,var'a atanır. |
| var ^= op1; | var ^ op1 ,var'a atanır. |
Örnekler :
$result = 42; # $result 'un değeri 42 olur $value1 = $value2 = "a string"; # Hem $value1,hem de $value2 nin #içine "a string" atanır. $var = $var + 1; ile $var += 1;
aynı işlemi ifade eder. ($var değişkeninin değeri 1 arttırılır ve yeni değer tekrar $var'a konur)
| İfade kullanımı | Yürütülen işlem |
| $a = 1; | 1,$a içine yerleşir |
| $a -= 1; | $a = $a - 1; |
| $a *= 2; | $a = $a * 2; |
| $a /= 2; | $a = $a / 2; |
| $a %= 2; | $a = $a % 2; |
| $a **= 2; | $a = $a ** 2; |
| $a &= 2; | $a = $a & 2; |
| $a |= 2; | $a = $a | 2; |
| $a ^= 2; | $a = $a ^ 2; |
($a = $b) += 3;
bu örnekte işleyiş şöyledir. Önce parantez içi işlenir. Bu durumda $a = $b; ve $a += 3; işlemleri yapılır
$a = $a + 1; $a += 1;
Her iki örnekte de $a değeri 1 artırılmaktadır. $a değerini otomatik arttırma kullanımı ise şöyledir
$a++; veya ++$a;
1. ve 2. ifadedeki fark şudur. 1.de arttırma işlemi atama işleminden önce 2. de sonra yapılmasını belirler. Otomatik eksiltmede buna benzer.Aynı mantıkla çalışır. Sadece işlem eksiltme şeklinde gerçekleşir.
$a--; veya --$a;
Örnek program : Program adı preprg.pl olsun
| Göster Gizle Kopar Satır Gizle Satır Göster |
#!/usr/local/bin/perl $sayi = 0; while (++$sayi <= 5) { print("Deger: $sayi\n"); } print("Son !\n");
Çalışması :
>preprg.pl Deger: 1 Deger: 2 Deger: 3 Deger: 4 Deger: 5 Son ! >
Örnek program : Program adı preprg2.pl olsun
| Göster Gizle Kopar Satır Gizle Satır Göster |
#!/usr/local/bin/perl $sayi = 0; while ($sayi++ <= 5) { print(" Deger: $sayi\n"); } print("Son !\n");
Çalışması :
>prepprg2.pl Deger: 1 Deger: 2 Deger: 3 Deger: 4 Deger: 5 Deger: 6 Son ! >
Bu örneğin çalışmasını anlamak için şu tabloyu inceleyelim.
| $valueTest anında | Sonuç | $value Testten sonra |
| 0 | true (0 <= 5) | 1 |
| 1 | true (1 <= 5) | 2 |
| 2 | true (2 <= 5) | 3 |
| 3 | true (3 <= 5) | 4 |
| 4 | true (4 <= 5) | 5 |
| 5 | true (5 <= 5) | 6 |
| 6 | false (6 <= 5) | 7 (while döngüsü çıkışı) |
$string1 = "abc"; $string1++;
Şu anda $string1 içindeki değer "abd" dir.
Stringlerde otomatik eksiltme olmaz ($string1--). Böyle bir durumda string içindeki değer -1 olur.
$string1 = "aBC"; $string1++;
Şu anda $string1 içindeki değer "aBD" dir.
$string1 = "abz"; $string1++; # $string1 içi "aca" dır.
$string1 = "AGZZZ"; $string1++; # $string1 içi "AHAAA" dır.
$string1 = "bc999"; $string1++; # $string1 içi "bd000" dır
Birleştirme :
$yenistring = "tas" . "kafa";
satırı sonucu olarak $newstring değişkeninin içeriği "taskafa" olur.
. operatörü değişkenlerle de kullanılır. Örn:
$string1 = "tas"; $string2 = "kafa"; $yenistring = $string1 . $string2;
$yenistring değişkeninin içeriği " taskafa " olur.
Tekrarlama:
$yenistring = "t" x 5;
$yenistring değişkeninin içeriği "ttttt" olur.
x operatörü değişkenlerle de kullanılır. Ör:
$string1 = "t"; $tekrar = 5; $yenistring = $string1 x $tekrar;
$yenistring değişkeninin içeriği "ttttt" olur.
x operatörü kullanırken x etrafında boşluk bulunmalıdır.
$yeni = $eski x 5; #Doğru kullanım $yeni = $eskix 5; # Yanlış " $yeni = $eski x5; # Yanlış "
$a = "Ata"; $a .= "türk"; # $a nın değeri şimdi "Atatürk" dir.
Aşağıdaki kullanımda aynı sonucu verir.
$a = "Ata"; $a = $a . "türk";
Örnek Program : Program adı strcon.pl olsun
| Göster Gizle Kopar Satır Gizle Satır Göster |
#!/usr/local/bin/perl $sonuc = ""; print("Kelimeler giriniz çıkış için sadece enter basınız\n"); $gir = <STDIN>; chop ($gir); while ($gir ne "") { $sonuc .= $gir; $gir = <STDIN>; chop ($gir); } print ("Girilen kelimeler:\n"); print ("$sonuc \n");
Çalısması:
>strcon.pl Kelimeler giriniz çıkış için sadece enter basınız ben sen o Girilen kelimeler: benseno >
, (virgül) operatörü; ifadeyi parçalara ayırır. Ör:
$a1 += 1; $a2 = $a1;
satırları virgül kullanımı ile şu şekilde kodlanır,
$a1 += 1, $a2 = $a1;
, operatörü atama işlemlerinde sıkça kullanılır, Ör:
$val = 26; $result = (++$val, $val + 5);
ilkönce ++$val işlenir çünki virgülden öncedir $val,27 olur. Sonra 5 eklenir 32 olur bu değer,$result 'e atanır.
Bunlar ? ve : operatörleridir. Ör:
$sonuc = $a == 0 ? 14 : 7;
çalışmasını inceleyerek anlayalım;eğer $a == 0 ise , $sonuc değişkenine 14 atanır, değilse 7 atanır.Yani koşul doğru ise ? sonrası, yanlış ise : sonrası atanır.,eğer bu işlemi if else ile yapmak isteseydik şöyle kodlayacaktık.
if ($a == 0) {
$sonuc = 14;
} else {
$sonuc = 7;
}
Bir de şunu inceleyelim;
$kosul == 43 ? $a1 : $a2 = 14;
Buradaki işleyiş ise şöyledir; Eğer $kosul içindeki değer 43 ise, $a1 'e 14 atanır. Değilse $a2'ye 14 atanır..
Örnek Program : program adı pwdprg.pl olsun
| Göster Gizle Kopar Satır Gizle Satır Göster |
#!/usr/local/bin/perl print ("Parola giriniz:\n"); $parola = "ertan"; $giris = <STDIN>; chop ($giris); $sonuc = $giris eq $parola ? "Dogru parola!\n" : "Yanlis parola.\n"; print ($sonuc);
Çalışması:
>pwdprg.pl Parola giriniz: abc Yanlis parola. >
|
|