ProgramlamaPerl geliştiricisi

Perl'de dizelerin farklı türlerinde dizi, hash ve scalar'ların nasıl interpolasyon yapıldığını ve bu mekanizmanın hangi tehlikelerle bağlantılı olduğunu anlatın.

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

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.


Kandırma Sorusu

"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 $rub değişkeni eklendikten sonra dize "İtibariyle: $sum$rub" oldu, bu nedenle interpolasyon yalnızca $sum için çalıştı, $rub atlandı 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.