Perl, çift (“) ve tek (’) tırnaklarla iki tür dizgi ederi destekler. Çift tırnak içindeki dizgilerde interpolasyon gerçekleşir: değişkenler ve , \t gibi özel karakterler kendi değerleriyle değiştirilir. Tek tırnak içinde interpolasyon yoktur - içeriği kelimesi kelimesine alır.
Örnek:
my $name = "Alex"; print "Hello, $name! "; # Hello, Alex! print 'Hello, $name! '; # Hello, $name! # İfade interpolasyonu küme parantezleri ile mümkündür: my $i = 10; print "i + 5 = @{[$i + 5]} "; # i + 5 = 15
@{[ ... ]} kullanın - bu, ifadenin sonuçlarını dizgye güvenli bir şekilde eklemenin bir yoludur.Çift tırnak içindeki dizgide değişkenlerin interpolasyonu yapılmadığı durumlar nelerdir?
Cevap: Değişken kaçırıldığında (\$var), tek tırnak içinde bulunduğunda ya da eğer küme parantezleri ile kullanılıyorsa ama amacı dışında yapıldığında, ya da değişken adı parantezlerle sınırlı değilse ve değişken adı harflerle "yapıştırılıyorsa".
my $world = 'earth'; print "Hello, $worlds! "; # HATA: $worlds değişkeni yok, $world + s harfi var
Hikaye
Büyük bir projede günlük kaydı için değişkenlerle dizgiler kullanıldı:
my $file = '/tmp/data'; print LOG 'File: $file
';
Dosyanın yolunu göreceklerdi, ancak günlük dosyaya kelimesi kelimesine `$file` gidiyordu, çünkü tek tırnaklar kullanıldı. Problem, üretimde çalıştırıldıktan sonra fark edildi.
Hikaye
Bir geliştirici dizgi içerisine küme parantezleri olmadan bir değişken yerleştirdi:
my $user = "bob"; print "User: $user21
";
`bob21` yazılacağını bekliyorlardı, ancak yorumlayıcı `$user21` (bulunmayan bir değişken) aramaya başladı. Bu, raporlarda boş bir değerin çıkmasına sebep oldu.
Hikaye
İfade sonucunu dizgi içinde göstermek için böyle bir kod kullanıldı:
my $a = 3; print "Sum: $a+5
"; # Bekleniyordu: 'Sum: 8', alınan: 'Sum: 3+5'
Gerçekten de, interpolasyon sadece değişkenleri değerlendirir, ifadeler kelimesi kelimesine yerleştirilir. @{[ ... ]} ile çalışmak gerekir.