Aralık operatörü (..), Perl'in ardışık diziler oluşturma veya belirli bir koşul aralığını izleme için kullandığı benzersiz araçlardan biridir. Bağlama bağlı olarak, ya liste üretici olarak ya da mantıksal bir bayrak olarak çalışır.
Konu Tarihi:
Perl, ilk sürümlerinden itibaren açık döngüler yazmadan listesini kolayca oluşturmak için (1..10) gibi yapılar kurmaya olanak tanımıştır. Ancak bu operatör, koşullu ifadeler içinde özel bir davranış sergiler.
Sorun:
Birçok kişi liste (liste bağlamında ardışık sayı oluşturma) ile "flip-flop" (mantıksal bağlamda kendinden devreye giren aralık) arasında karışıklık yaşamaktadır. İlk durumda sonuç bir dizi sayı/strin, ikincisinde ise belirli bir kod parçasındaki kontrol bayrağıdır.
Çözüm:
Bağlamlar arasındaki farkı anlamak. Liste oluşturmak için koşul dışında skalar veya liste bağlamında kullanmak. Mantıksal bağlamda operatör, "X ile Y arasında" gibi çalışır (bayraklarla çalışmak).
Kodu örneği:
# 1'den 10'a kadar sayı listesi my @nums = (1..10); # Harf listesi my @letters = ('a'..'f'); # "Flip-flop" bayrağı while (<DATA>) { print if /START/ .. /END/; }
Ana özellikler:
(1..5) ifadesinin skalar ve liste bağlamındaki sonucu nedir?
Skalar bağlamda (1..5) aralık son sayısı olan 5'i döndürür. Liste bağlamında ise dizi 1,2,3,4,5'tir.
Flip-flop iç içe koşullar içinde nasıl çalışır (örneğin, iki flip-flop ile bir döngüde)?
Her flip-flop operatörü, her satırda (veya yinelemede) bağımsız bir "sayacı-bayrak"tır. Koşullar örtüşürse veya üst üste gelirse, sonuç beklenmedik olabilir, özellikle de birden fazla blok okunurken.
Aralıkta sayı yerine string kullanılırsa ne olur? Örneğin, ('aa'..'ad')
Perl, alfabetik sırayla bir string dizisi oluşturur: ('aa', 'ab', 'ac', 'ad'). Sadece geçerli Latin harfleri ile çalışır, Unicode ile değil.
Yanlış bir koşul ile aralık kullanarak bir log dosyasını okurken, ilginç satırlardan bazıları kaybolur.
Artılar:
Eksiler:
Flip-flop için şartları net bir şekilde belirtmek, hatalı durumlarda test etmek ve ek kontroller eklemek.
Artılar:
Eksiler: