Perl kontrol yapıları - Perl control structures

Temel kontrol yapıları Perl kullanılanlara benzer C ve Java, ancak birkaç şekilde genişletildi.

Döngüler

Aşağıda, etiket iki nokta üst üste ile sonlandırılan isteğe bağlı bir tanımlayıcıdır ve blok küme ayraçları ile çevrelenmiş bir veya daha fazla Perl ifadesi dizisidir. C stili dışında tüm döngü yapıları için-döngü olabilir devam et döngü gövdesinin her yinelemesinden sonra, döngü koşulu yeniden değerlendirilmeden önce yürütülen blok.

etiket için ( ifade1 ; ifade2 ; ifade3 ) blok

Bu sözde C stil için döngü. İlk ifade, ilk döngü yinelemesinden önce değerlendirilir. İkinci ifade, her yinelemeden önce değerlendirilir ve yanlış olarak değerlendirilirse döngü sonlandırılır. Üçüncü ifade, her yinelemeden sonra, bir sonrakinin gerçekleştirilip gerçekleştirilmeyeceğine karar vermeden önce değerlendirilir. Bu için döngü, sahip olamayan tek döngü yapısıdır. devam et blok ama ifade3 işlevsel olarak eşdeğerdir.

etiket için var ( liste ) bloketiket için var ( liste ) blok devam et bloketiket her biri için var ( liste ) bloketiket her biri için var ( liste ) blok devam et blok

İçinde her biri için, var varsayılan olan skaler bir değişkendir $_ ihmal edilirse. Her bir öğe için liste, var öğenin diğer adıdır ve döngü gövdesi bir kez çalıştırılır. Anahtar kelimeler için ve her biri için eşanlamlıdır ve her zaman birbirinin yerine kullanılabilir.

etiket süre ( ifade ) bloketiket süre ( ifade ) blok devam et bloketiket a kadar ( ifade ) bloketiket a kadar ( ifade ) blok devam et blok

süre döngü, kontrol ifadesi doğru olduğu sürece döngü gövdesini tekrar tekrar çalıştırır. Koşul, döngü gövdesinden önce değerlendirilir. a kadar benzerdir, ancak koşul yanlış olduğu sürece döngü gövdesini yürütür.

etiket bloketiket blok devam et blok

etiket blok yapı biraz garip: Perl, çıplak bir bloğu - etiketli veya etiketsiz - bir kez çalıştırılan bir döngü olarak ele alır. Bu, döngü kontrol anahtar sözcüklerinin bloğu yeniden başlatmak veya ondan erken çıkmak için kullanılabileceği anlamına gelir; çıplak bir blokta ayrıca bir devam et blok.

Döngü kontrolü anahtar kelimeleri

Perl, tümü isteğe bağlı bir döngü etiketini bağımsız değişken olarak kabul eden üç döngü kontrol anahtar sözcüğü sağlar. Herhangi bir etiket belirtilmezse, anahtar kelimeler en içteki döngüde hareket eder. İç içe döngüler içinde etiketlerin kullanımı, kontrolün bir iç döngüden bir dış döngüye veya tamamen dış döngüden çıkmasına olanak tanır. Döngü kontrol anahtar sözcükleri, C veya Java'daki gibi ifadeler olarak değil, Perl'de ifadeler olarak ele alınır.

  • Sonraki anahtar sözcük doğrudan döngünün geçerli yinelemesinin sonuna atlar. Bu genellikle döngünün bir sonraki yinelemesinin başlamasına neden olur, ancak devam et önce blok ve döngü durumu değerlendirilir.
  • son anahtar kelime, etiket tarafından tanımlanan döngünün yürütülmesini derhal sonlandırır. devam et blok yürütülmez.
  • yeniden yapmak anahtar kelime, etiket tarafından tanımlanan döngünün geçerli yinelemesini yeniden başlatır. Ne devam et blok veya döngü koşulu değerlendirilir.

Koşullu ifadeler

Eğer ( ifade ) blokEğer ( ifade ) blok Başka blokEğer ( ifade ) blok elsif ( ifade  ) blok ... Başka bloksürece ( ifade ) bloksürece ( ifade ) blok Başka bloksürece ( ifade ) blok elsif ( ifade  ) blok ... Başka blok

nerede blok küme ayraçları ile çevrili bir veya daha fazla Perl ifadesi dizisidir.

Denetleyici ifadeler bir Boole bağlam: 0 sayısal değeri, "" ve "0" dizeleri ve tanımsız değer undef yanlış, diğer tüm değerler doğrudur. Bu, dizelerin "0.0", "00", "-0 "ve" 0 ama true "değerlerinin tümü, değerleri sayısal bir bağlamda 0'a dönüştürülecek olsa bile doğrudur; bunun gibi değerler bazen başarılı bir işlemin 0 döndürmesi gerektiğinde kullanılır.

Skaler bağlam getirilerinde boş bir diziyi değerlendirme undefyanlış olan. Bu nedenle, aşağıdaki örnek "a boş" yazdırır:

benim @a=(); '' 'sürece' '' (@a) { '''Yazdır''' "a boştur" }

İfade değiştiriciler

Perl ayrıca bir blok yerine basit bir ifade (yan etkileri için değerlendirilen bir ifade) üzerinde çalışan döngü ve koşullu yapıların varyantlarını da sağlar:

Beyan Eğer ifade;Beyan sürece ifade;Beyan süre ifade;Beyan a kadar ifade;Beyan için liste;Beyan her biri için liste;

süre ve a kadar değiştiriciler, tıpkı döngü karşılıkları gibi, ifadeyi çalıştırmadan önce denetleyen ifadeyi test eder. Ancak, bunlar gerçek döngüler olarak kabul edilmezler, bu nedenle döngü kontrol anahtar kelimeleri Sonraki, son ve yeniden yapmak onlarla birlikte kullanılamaz. İle birleştirildiklerinde özel anlamlara sahiptirler. yapmak anahtar kelime:

yapmak blok süre ifade;yapmak blok a kadar ifade;

Bu yapılarda, koşul, blok çalıştırıldıktan sonra test edilir, böylece blok her zaman en az bir kez yürütülür.

Bu değiştiriciler yuvalanamaz, bu nedenle aşağıdakiler yasa dışıdır

Beyan Eğer ifade için liste; #HATA

ve şunlardan biri olarak yazılmalıdır:

( ifade ) ve ( Beyan ) için liste;için ( liste ) { Beyan Eğer ifade }yapmak { Beyan Eğer ifade } her biri için liste;

git

İki şekli vardır git Perl'de:

etikete git

ve

git ve alt program

İlk biçim genellikle kullanımdan kaldırılmıştır ve yalnızca nadir durumlarda kullanılır. Örneğin, hata durumunu korumaya çalışırken $?, bazı modüller goto işlevini şu şekilde kullanır:

açık(Bir, "<", $ filea) veya git başarısız;açık(B ,">", $ dosyab) veya git başarısız;Yazdır B <A> veya git başarısız;kapat Bir veya git başarısız;kapat B veya git başarısız;dönüş 1;başarısız: $ neden = "Kopyada: $?"; dönüş 0;

İkinci forma a denir kuyruk çağrısı ve Perl'in varsayılan yığın yönetiminin optimum olmayan şekilde çalışacağı belirli yapı türlerinin performansını artırmak için kullanılır. Örneğin:

alt faktöryel {    benim $ n = vardiya;    benim toplam $ = vardiya(@_) || 1;    Eğer ($ n > 1) {        @_ = ($ n-1,toplam $*$ n);        git &faktöryel;    } Başka {        dönüş toplam $;    }}

Bu form aynı zamanda minimum ek yükü olan alt programlar için takma adlar oluşturmak için de kullanılır. Bu, aynı alt yordamı tekrarlarken sıklıkla bulunan "Bellek Yetersiz" hatalarını (veya genel olarak yüksek bellek kullanımını) azaltmaya yardımcı olabilir.

Dış bağlantılar

Perl Programlama / Akış kontrolü Vikikitap'ta