Perl'de açık string birleştirmesi için nokta (.) operatörü kullanılır. Tarihsel olarak, Perl'de bu tür bir birleştirme birçok başka dilden daha kolaydır ve genellikle stringler veya dinamik mesajlar birleştirmek için kullanılır. Birleştirme, string işlemi olarak işlenir, bu da sık sık ince hataların meydana gelmesine neden olabilir.
Tarihçe:
Perl, stringleri birbirine yapıştırmak için açık bir operatör sunmuştur, böylece bunu sayıları toplama işleminden ayırabilmiştir — çünkü Perl'de + her zaman sayısaldır.
Sorun:
Ana sorun, örtük tür dönüşümüdür. Perl, ifadenin içinde nokta (.) varsa değerleri otomatik olarak stringlere dönüştürür, ancak bu, sayılar, undef veya karmaşık yapılarla çalışırken beklenmedik sonuçlara yol açabilir.
Çözüm:
Nokta (.) operatörünü sadece string birleştirmek için kullanmak ve türleri karıştırırken dikkatli olmak. Türden emin olunmadığında verileri açıkça stringe dönüştürmeye çalışmak.
Kodu örnek:
my $a = 20; my $b = ' elma'; my $c = $a . $b; # $c '20 elma' olacak. my $d = undef; my $s = 'Cevap: ' . $d; # $s 'Cevap: ' olacak.
Anahtar özellikler:
+ her zaman sayıları toplar.Undef ve bir string birleştirildiğinde ne olur?
Perl, undef'i uyarı vermeden boş bir stringe dönüştürür. Eğer anlamlı bir bilgi bekleniyorsa çıkışta hatalara yol açabilir.
Stringlerle çalışırken ".=" ve "=" operatörleri arasındaki fark nedir?
.= — birleştirme ile atama operatörü (stringi artırır), = — basit atama. Fark, döngüsel işlemler ve büyük verilerle çalışırken kritiktir.
my $str = "a"; $str .= "b"; # str = "ab" $str .= "c"; # str = "abc"
Nokta (.) yanlışlıkla bir sayının parçası (örneğin ondalık sayıda) olarak yorumlanabilir mi?
Hayır, Perl her zaman bir ifade içinde .'yi birleştirme ve bir sayının parçası olarak ayırt eder. Ancak reguler ifadelerde noktanın kendine özgü bir anlamı vardır ("herhangi bir karakter").
+ ve .'yi karıştırmak, türlerin açıkça kontrol edilmemesi.Sayılara ve stringlere açık tür kontrolü olmadan birleştiriyoruz, "3 elma" bekliyoruz, ama "12 elma" alıyoruz.
Artılar:
Eksiler:
Tüm sayıları önceden stringe dönüştürüyoruz, string işlemleri için sadece noktayı kullanıyoruz.
Artılar:
Eksiler: