OPERATÖRLER
 
Aritmetik Operatörler:
 
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
 
#!/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
>
 
NOT : Negatif ve noktalı sayı kullanmak hataya sebep olur
 
Ör: (-5) ** 2.5  ..gibi 
 
Yine sınırları aşan sayılar da hataya neden olur
 
Ör: 10 ** 999999 ..gibi
 
MOD (Artık) Operatörü:
 
Ör:  $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.
 
Ö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.
 
Ör:  $x = 25 % 0;        
       $x = 25 % 0.1;     
 
Unary negation operatörü:
  - operatörü:
  Değeri -1 ile çarpmaktır.
  - işareti bu operatör ile kullanımında eksi işareti anlamında değildir.
 
Örnek : - 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.
 
Örnek :
 
# 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
 
Örnek : Önceden eksiltmeli opr kullanımı.
 
$sayi = 5;
$toplam = --$sayi + 5;
print("$sayi $toplam \n");
 
Çıktı :   4 9
 
 
Örnek : sonradan arttırmalı opr kullanımı.  
 
$sayi = 5;
$toplam = $sayi++;
print("$sayi $toplam \n");
 
Çıktı :   6 5
 
KIYAS OPERATÖRLERİ KULLANIMI:
 
$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.
   1.Sayısal işlemlerde
   2.String işlemlerde
 
Tamsayı Kıyas Operatörleri:
 
 

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

 
 
Örnek :
 
$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örler
 

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ıyas Dönüş 1, 0, or -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
 
 
String - Sayısal Kıyas Karşılaştırması:
 
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).
 
 
Floating-Point Sayılarda Kıyaslama:
 
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.
 
#!/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
 
Mantıksal Operatörler
 
&&              ve
||              veya
!  değil
 
$a || $b                   # ikisinden biri 0 olmayan değerse doğru
$a && $b                  # sadece her ikiside 0 olmayan değerse doğru
! $a                            # $a,0 ise doğru
 
 
Şu kullanım da doğrudur:
$a or $b                    # veya
$a and $b                 # ve
not $a                       # değil
$a xor $b                  # özel veya(birisi 0 olmayan değerse doğru,her ikisi ise değil)
 
Örnekler:
$a = 5;
$b = 0;
$a || $b;                  # true: $a, 0 değil
$b || $a;                  # true
$a && $b;  # false: $b 0
! $a;                          # false: $a ,0 değil,dolayısıyla  ! $a 0 dır.
! $b;                          # true: $b 0 dır dolayısıyla ! $b ,0 değildir
Bu operatörleri kontrol ifadelerinde bolca kullanırız
 
Ör :
     if ($a1 == 26) {
             if ($b2 > 0) {
                     if ($c1 eq "tamam") {
                             print("Koşullar tamam!\n");
                     }
             }
     }
 
 
Bu kodlamayı şu şekilde de yapabiliriz: 
 
     if ($a == 26 && $b > 0 && $c eq "tamam") {
             print("3 koşulda tamam!\n");
     }
 
Her ikisinin sonuçları da aynıdır.
 
     $x == 0 || $y / $x > 5
 
 
Mantıksal operatörler ve alt ifadeler :
 
Ör :
$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;
     }
 
 
 
ATAMA OPERATÖRLERİ
 
Temel atama operatörü = göstergesidir. $a = 5;  # 5 değeri $a değişkenin içine yerleştirilir.

 

ATAMA operatörleri tablosu



Operator

İ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)
 
Atama işlemleri örnekleri içeren bir tablo:

 

İ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;

 

Alt ifadelerle Kullanım :

 

Ör: ($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.                

 

Otomatik Arttırma ve eksiltme:

 

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

Ör :  $a--;  veya  --$a;

 

Örnek program : Program adı preprg.pl olsun

 

#!/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

 

#!/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.

 

İşlem yürütme tablosu
 

$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ışı)

 
 
STRiNGLERDE OTOMATİK ARTTIRMA:
 
$string1 = "abc";
$string1++;
Şu anda $string1 içindeki değer  "abd"   dir.
 
NOT : 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.
 
                                              -----***-----
 
STRİNG BİRLEŞTİRME VE TEKRARLAMA:
 
 .      operatorü, string birleştirir .
 x      operatorü, string tekrarlar.
.=     operatorü, string birleştirir ve atama yapar. 
 
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.
 
Ör :
$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.
 
NOT !!!! : 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ış  "
        
 
BİRLEŞTİRME ve ATAMA:
 
$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
 
  #!/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
                          >
DİĞER OPERATÖRLER:
 
, (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.
 
ŞART(Koşul) operatörleri:
 
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
 
#!/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.
>