Perl'de değişkenler skalarlar ($), diziler (@) ve hash'ler (%) olarak üçe ayrılır:
Skalarlar ($değişken) – tek bir değeri (string, sayı) saklar:
my $name = "Ivan"; my $age = 30;
Diziler (@array) – sıralı elemanlar kümesi (sayılara göre indekslenir):
my @fruits = ("apple", "banana", "cherry"); print $fruits[1]; # banana
Hash'ler (%hash) – anahtar-değer çiftleri kümesi (ilişkisel dizi):
my %colors = (red => "#ff0000", green => "#00ff00"); print $colors{"red"}; # #ff0000
Elemanlara erişmek için değişken türüne bağlı olarak belirli bir sembol kullanıldığını unutmayın:
$array[0] — dizi elemanı$hash{"anahtar"} — anahtara göre hash değeridir@array[1,2] ve $array[1,2] ifadeleri arasındaki fark nedir?
Cevap:
@array[1,2]— bir dizi elemanlarının çoklu listesi sağlar (dilim).$array[1,2]— yanlıştır, hata verir. Birden fazla dizi elemanına erişmek için yalnızca dilim@array[...]kullanılır.Örnek:
my @array = (10, 20, 30, 40); my @slice = @array[1,2]; # (20, 30)
Hikaye
Bir günlükleme projesinde, programcı bir hash elemanına
@colors{"red"}ile erişmeye çalıştı. Sonuçta, hash'in değeri değil, rastgele bir hata alındı çünkü tek bir değer için$yerine@kullanılmaması gerekiyordu.
Hikaye
Bir hizmette dizi indeksleri üzerinde iterasyon yaparken doğru erişimi kullanmayı unuttular —
$array[$i]yerine@array$ikullandılar, bu da uyarılara ve yanlış sonuçlara yol açtı.
Hikaye
Bir API projesinde, dizi alan bir fonksiyon tanımlandı
$argsolarak, ama çağrıda dizi skalar olmadan geçirildi:func(@list). Bu şekilde dizi elemanları "listeye" açıldığında, fonksiyon beklenildiği gibi çalışmadı. Doğru olan, diziyi@argsolarak almaktı.