Perl'de çift tırnak içinde ("") ve belirli şablonlarda (örneğin, heredoc) değişkenlerin interpolasyonu (değişkenlerin yerine geçmesi) desteklenmektedir. Scalar'lar basit bir şekilde interpolasyona tabi tutulur:
my $name = 'Bob'; print "Hello, $name! "; # Hello, Bob!
Diziler çift tırnakta interpolasyon sonrasında, elemanları $" karakteriyle ayrılmış bir diziye (Varsayılan olarak boşluk) dönüşür:
my @items = ('a','b','c'); print "List: @items "; # List: a b c
Hash'lar ise anahtar=>değer şeklinde string olarak, $; karakteriyle ayrılır:
my %h = (x => 1, y => 2); print "Hash: %h "; # Hash: x1y2 (farklı olabilir)
Tek tırnak içinde (' ') hiçbir şey interpolasyona tabi tutulmaz — dize kelimesi kelimesine yazdırılır.
Ayrıca, karmaşık ifadelerin interpolasyonu için süslü parantezler kullanılabilir:
print "${name}_test "; # Bob_test
Tehlike — özel karakterlerin rastgele interpolasyonu ve dizilerin, hash'lerin ve scalar'ların davranışındaki farklılıklardır.
"Total: $total$val" dizesi neden bazen yanlış çalışır?
Yaygın cevap: "Her şey olduğu gibi yerleştiriliyor!"
Doğru cevap:
Dize "Total: $total$val" yalnızca $total değişkenini doğru bir şekilde yerleştirebilir, $val değişkeni tanınmayabilir veya Perl yanlış aralığı interpolasyon yapabilir, eğer değişken isimleri benzerlik gösteriyorsa. Yanlış anlamayı önlemek için süslü parantez kullanın:
print "Total: ${total}${val} ";
Tarih
Tarih 1
Raporlarda toplam dizesi "İtibariyle: $sum rub." şeklindeydi. Kodda
$rubdeğişkeni eklendikten sonra dize "İtibariyle: $sum$rub" oldu, bu nedenle interpolasyon yalnızca$sumiçin çalıştı,$rubatlandı ve uyarılar geldi. Kimse anlamadı, ta ki boş bir dize ekrana yazdırılana kadar.
Tarih 2
SQL sorgusu oluşturulurken @values dizisinin interpolasyonu
"IN (@values)"şeklinde kullanıldı, bu da beklenen virgülle ayrılmış liste yerine boşluk ile ayrılmış bir dizeye sebep oldu. Sonuç — SQL'de hata ve yanlış seçim.
Tarih 3
Hash'ın anahtar listesini çıkarmak için %h kullanıldı: "Anahtarlar: %h". Bu durumda, iyi bir anahtar listesi yerine anahtar-değerle bir dize oluşuyordu. Şunları yapmak gerekirdi:
join ", ", keys %h.