Kontrolní struktury Perlu - Perl control structures

Základní kontrolní struktury Perl jsou podobné těm, které se používají v C a Jáva, ale byly rozšířeny několika způsoby.

Smyčky

V následujícím, označení je volitelný identifikátor ukončený dvojtečkou a blok je posloupnost jednoho z více příkazů Perlu obklopených složenými závorkami. Všechny smyčkové konstrukce kromě stylu C. pro- smyčka může mít a pokračovat blok, který se provede po každé iteraci těla smyčky, než se znovu vyhodnotí podmínka smyčky.

označení pro ( expr1 ; expr2 ; expr3 ) blok

Jedná se o tzv C -styl pro smyčka. První výraz je vyhodnocen před první iterací smyčky. Druhý výraz je vyhodnocen před každou iterací a smyčka je ukončena, pokud je vyhodnocena jako false. Třetí výraz je vyhodnocen po každé iteraci, před rozhodnutím, zda provést další. Tento pro loop je jediný konstrukt opakování, který nemůže mít a pokračovat blok, ale expr3 je funkčně ekvivalentní.

označení pro var ( seznam ) blokoznačení pro var ( seznam ) blok pokračovat blokoznačení pro každého var ( seznam ) blokoznačení pro každého var ( seznam ) blok pokračovat blok

v pro každého, var je skalární proměnná, která je výchozí $_ pokud je vynechán. Pro každý prvek seznam, var je aliasován k prvku a tělo smyčky je provedeno jednou. Klíčová slova pro a pro každého jsou synonyma a jsou vždy zaměnitelné.

označení zatímco ( expr ) blokoznačení zatímco ( expr ) blok pokračovat blokoznačení dokud ( expr ) blokoznačení dokud ( expr ) blok pokračovat blok

The zatímco loop opakovaně provádí tělo smyčky, pokud je řídící výraz pravdivý. Podmínka se vyhodnotí před tělem smyčky. dokud je podobný, ale provede tělo smyčky, pokud je podmínka nepravdivá.

označení blokoznačení blok pokračovat blok

The označení blok konstrukce je trochu zvláštnost: Perl zachází s holým blokem - se štítkem nebo bez něj - jako se smyčkou, která se provede jednou. To znamená, že klíčová slova pro řízení smyčky lze použít k restartování bloku nebo k jeho předčasnému ukončení; holý blok může mít také a pokračovat blok.

Klíčová slova ovládání smyčky

Perl poskytuje tři klíčová slova pro ovládání smyčky, která jako argument přijímají volitelný štítek smyčky. Pokud není zadán žádný štítek, klíčová slova působí na nejvnitřnější smyčku. V rámci vnořených smyček umožňuje použití štítků ovládání přesunu z vnitřní smyčky do vnější nebo z vnější smyčky úplně. Klíčová slova pro ovládání smyčky jsou považována za výrazy v Perlu, nikoli za příkazy jako v C nebo Javě.

  • The další klíčové slovo přeskočí přímo na konec aktuální iterace smyčky. To obvykle způsobí spuštění další iterace smyčky, ale pokračovat nejprve se vyhodnotí stav bloku a smyčky.
  • The poslední klíčové slovo okamžitě ukončí provádění smyčky identifikované štítkem. The pokračovat blok není proveden.
  • The předělat klíčové slovo restartuje aktuální iteraci smyčky identifikované štítkem. Ani pokračovat blok ani stav smyčky se nevyhodnocuje.

Podmíněná prohlášení

-li ( expr ) blok-li ( expr ) blok jiný blok-li ( expr ) blok elsif ( expr  ) blok ... jiný blokledaže ( expr ) blokledaže ( expr ) blok jiný blokledaže ( expr ) blok elsif ( expr  ) blok ... jiný blok

kde blok je posloupnost jednoho z více příkazů Perlu obklopených složenými závorkami.

Řídící výrazy jsou vyhodnoceny v a booleovský kontext: Číselná hodnota 0, řetězce „“ a „0“ a nedefinovaná hodnota undef jsou nepravdivé, všechny ostatní hodnoty jsou pravdivé. To znamená, že řetězce "0.0", "00", "-0 „, a„ 0 ale true “jsou všechny true, i když jejich hodnota by byla převedena na 0 v číselném kontextu; takové hodnoty se někdy používají, když úspěšná operace potřebuje vrátit 0.

Vyhodnocení prázdného pole ve skalárním kontextu přináší výnosy undef, což je nepravdivé. Následující příklad proto vytiskne „a je prázdné“:

můj @A=(); '' 'pokud' '' (@A) { '''tisk''' „a je prázdné“ }

Modifikátory výpisů

Perl také poskytuje varianty smyčky a podmíněné konstrukce, které fungují na jednoduchém příkazu (výraz vyhodnocený pro jeho vedlejší účinky) namísto bloku:

tvrzení -li expr;tvrzení ledaže expr;tvrzení zatímco expr;tvrzení dokud expr;tvrzení pro seznam;tvrzení pro každého seznam;

The zatímco a dokud modifikátoři před provedením příkazu otestují řídicí výraz, stejně jako jejich protějšky ve smyčce. Nejsou však považovány za skutečné smyčky, takže klíčová slova pro řízení smyčky další, poslední a předělat nelze s nimi použít. Mají speciální sémantiku v kombinaci s dělat klíčové slovo:

dělat blok zatímco expr;dělat blok dokud expr;

V těchto konstrukcích je podmínka testována po provedení bloku, takže blok se provede vždy alespoň jednou.

Tyto modifikátory nelze vnořit, takže následující je nezákonné

tvrzení -li výraz pro seznam; #CHYBA

a měl by být zapsán jako jeden z:

( výraz ) a ( tvrzení ) pro seznam;pro ( seznam ) { tvrzení -li výraz }dělat { tvrzení -li výraz } pro každého seznam;

jít do

Existují dvě formy jít do v Perlu:

přejít na štítek

a

přejít na & podprogram

První forma je obecně zastaralá a používá se pouze ve výjimečných situacích. Například při pokusu o zachování chybového stavu v $?, některé moduly budou používat goto takto:

otevřeno(A, "<", $ filea) nebo jít do selhat;otevřeno(B ,">", $ fileb) nebo jít do selhat;tisk B <A> nebo jít do selhat;zavřít A nebo jít do selhat;zavřít B nebo jít do selhat;vrátit se 1;selhat: $ důvod = „V kopii: $?“; vrátit se 0;

Druhá forma se nazývá a zadní volání a slouží ke zvýšení výkonu určitých druhů konstrukcí, kde by výchozí správa zásobníku Perlu fungovala neoptimálně. Například:

sub faktoriál {    můj $ n = posun;    můj $ celkem = posun(@_) || 1;    -li ($ n > 1) {        @_ = ($ n-1,$ celkem*$ n);        jít do &faktoriál;    } jiný {        vrátit se $ celkem;    }}

Tento formulář se také používá k vytváření aliasů pro podprogramy s minimální režií. To může pomoci snížit chyby „Nedostatek paměti“ (nebo obecně vysoké využití paměti), které se často vyskytují při opakování stejného podprogramu.

externí odkazy

Programování Perl / řízení toku na Wikibooks