Perl'de aritmetik ve string operatörleri ayrı ayrı uygulanır. Örneğin, +, -, *, / matematiksel işlemler için kullanılırken, . (nokta) string birleştirmek için kullanılır. Perl dinamik olarak türleri dönüştürür: eğer bir operand sayısal bir bağlamda ise, string otomatik olarak sayıya dönüştürülür (örneğin, '42foo' 42 olur). Bu, türlerin örtük dönüştürülmesi durumunda beklenmedik sonuçlara yol açabilir.
Örnek:
my $a = "3"; my $b = "4 elma"; my $c = $a + $b; # $c = 7 my $d = $a . $b; # $d = '34 elma'
Ayrıca karşılaştırma operatörleri de farklıdır:
==, !=, >, <)eq, ne, gt, lt)Perl'de == ve eq operatörleri arasındaki fark nedir ve string değerleri == ile karşılaştırdığınızda ne olur?
Cevap ve örnek:
== sayısal karşılaştırma yapar, stringleri sayılara örtük olarak dönüştürerek, eq ise string karşılaştırması yapar. Stringler için == kullanmak hata olacaktır:
my $x = "foo"; my $y = "foo"; print $x == $y ? "eşit" : "eşit değil"; # 'eşit değil' yazdırır ve hatalı dönüştürmeyi bildirir
Hikaye 1: Log işleme projesinde stringleri
==yerineeqile karşılaştırdık, bu da gerekli kayıtların atlanmasına yol açtı. Filtreleme mantığı bozuldu ve hata uzun süre bulunamadı, çünkü çalışma zamanı hatası yoktu.
Hikaye 2: Sayısal değerlerin birleştirilmesinde yanlışlıkla
+yerine.operatörünün kullanılması sebebiyle beklenmedik boşluklar ya da veri kaybı yaşandı. Bu da önbellek anahtarlarının yanlış oluşturulmasına yol açtı, sonuç olarak önbellek yanlış çalıştı.
Hikaye 3:
'100abc'gibi fazladan karakterlere sahip bir stringin sayıya 100 olarak otomatik dönüştürülmesi, e-ticaret projesinde indirim hesaplamalarında paradoksal hatalara yol açtı — bazı indirimler hatalı girdi verileri nedeniyle yanlış hesaplandı.