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