Az elágazás általános alakja:
IF kifejezés THEN utasítás [ ELSE utasítás ] FIN;
A kifejezés eredménye BIT(1) típusú kell legyen. Az '1'B felel meg az igaz eredménynek. ELSE IF is használható a nyelvben.
Példa:
IF gradient > degree_bound
THEN alarm;
ELSE IF gradient > degree_threshold
THEN ALL 1 SEC ACTIVATE measurement; ! measure more often
FIN;
FIN;
A PEARL a többszörös esetszétválasztás két formáját támogatja. A régebbi formában csak egész érték alapján történhet az esetszétválasztás, míg az újabb karaktert is megenged.
A régebbi forma általános alakja:
CASE kifejezés
ALT utasítás_1
ALT utasítás_2
...
[OUT utasítás_n]
FIN;
A kifejezés értékétől függően, az alternatívák sorban következnek: Az 1-es értékhez tartozó utasítás az első ALT után, a 2-es értékhez tartozó utasítás a második után stb. Az OUT után következő utasítás hajtódik végre minden egyéb esetben. Ennek az alternatívának a megadása nem kötelező.
A CASE után adott kifejezés értéke FIXED kell legyen.
Példa:
supply TASK PRIO 7;control: PROC (No FIXED, ! device
order BIT(8)) ! order inf.
RETURNS (FIXED);
! procedure body for carrying out the control order
END; ! control
...
! creating an order for the device with index noagain: CASE control (no, order) ALT ! order carried out
;
ALT ! order inf. wrong
CALL error(2); GOTO end;
ALT ! device dead
ACTIVATE device_breakdown PRIO 2;
CALL error(3); GOTO end;
ALT ! device works incorrectly
CALL device_check; GOTO again;
OUT ! result out of range
CALL error(5);
FIN;
...
end: END; ! supply
Az ALT kulcsszót minden esetben utasítás kell, hogy kövesse, de ez lehet az üres utasítás is.
A többszörös esetszétválasztás másik formájának általános alakja:
CASE kifejezés
ALT (esetek_1) utasítás_1
ALT (esetek_2) utasítás_2
...
[OUT utasítás_n]
FIN;
A CASE után a kifejezés értéke FIXED vagy CHAR(1) lehet. Az ALT után az esetek FIXED, ill. CHAR(1) típusú értékek, vagy intervallumok (int_kezdete:int_vége) felsorolását tartalmazzák vesszővel elválasztva. Az OUT megadása itt is opcionális.
Az esetszétválasztás determinisztikus kell legyen.
Példák:
1.
DCL (Operator, chr)CHAR(1), (x, y) FIXED;
...
CASE Operator
ALT (’+’) x := x + y;
ALT (’-’) x := x - y;
ALT (’*’) x := x * y;
ALT (’/’) CASE y
ALT (0) CALL Error;
OUT x := x//y;
FIN;
FIN;2.
CASE chr
ALT (’A’:’Z’) CALL uppercase;
ALT (’a’:’z’) CALL lowercase;
FIN;3.
CASE chr
ALT (’A’, ’E’, ’I’, ’O’, ’U’, ’a’, ’e’, ’i’, ’o’, ’u’) CALL Vocal(chr);
...
FIN;
A CASE két formája nem keverhető, ezért a következő példa hibás:
CASE ErrNum
ALT /* 1 */ CALL ok;
ALT (0) CALL nothing done;
ALT (-99:-1) CALL ErrorMsg (ErrNum);
...
Ugrás az esetszétválasztáson belülre tilos.
A ciklus általános alakja a PEARL-ben a következő:
[ FOR ciklusváltozó ] [ FROM kifejezés-kezdőérték ] [ BY kifejezés-növekmény ] [ TO kifejezés-végérték ] [ WHILE kifejezés-feltétel ]
REPEAT
...
END [azonosító];
A FOR, a FROM, a BY, a TO és a WHILE közül bármelyik elhagyható.
A ciklusváltozót nem kell deklarálni, és nem lehet az értékét a ciklusmagban megváltoztatni. A típusa FIXED.
Ha a kezdőértéket, vagy a növekményt elhagyjuk, akkor az alapértelmezett 1 lesz az értékük. A végérték elhagyásával a ciklusmag lefutásainak számát nem korlátozzuk, ha ezen kívül nem adunk meg ciklusfeltételt (WHILE), akkor végtelen ciklust kapunk. A kezdőérték, a végérték, és a növekmény típusa is FIXED kell legyen.
A ciklusfeltételt adó kifejezés típusa BIT(1).
A ciklusból ugró utasítással, illetve az exit utasítással lehetséges kiugrani a ciklus lefutása közben, de a ciklusmagba való ugrás tilos.
Példák:
1.
FOR i TO num.devices ! vagy: FOR i FROM 1 BY 1 TO num.devices
REPEAT
checking of device(i)
END;
2.
FOR i TO 10
REPEAT
FOR k TO 10
REPEAT
c (i,k) := a (i,k) + b(i,k);
END;
END;
Egy PEARL programban tetszőleges kifejezést jelölhető címkével (akár többször is), és GOTO utasítással elérhető, hogy a program futása egy ilyen címkével jelölt utasításnál folytatódjon. Az egyetlen feltétel, hogy az utasítás ugyanannak a taszknak illetve eljárásnak a törzsében szerepeljen. ahol a GOTO utasítást is meghívtuk.
Példa:
...
measure: read: READ value FROM device;
...
GOTO read;
Az EXIT utasítást blokkból, illetve ciklusból való kiugrásra használható. Alapesetben az utasítást tartalmazó legbelső blokk, vagy ciklus után következő utasításnál folytatja a program a futását, de több egymásba ágyazott blokkból, illetve ciklusból is kiléphetünk egyszerre. Ezt akkor tehetjük meg, ha a megfelelő blokkot, vagy ciklust elláttuk címkével.
Az utasítás nem használható eljárásokból, illetve taszkokból való kilépésre.
Példa:
...
BEGIN /* analysis */
...
TO number REPEAT /* comparison */
...
IF MeasuredValue < BoundaryValue
THEN EXIT analysis;
ELSE ...
FIN;
...
END comparison;
...
END analysis;
RETURN (OK);
...
Az "EXIT analysis" utasítás után a program futása a "RETURN (OK)" utasítással fog folytatódni.
Mindkét utasítás mögé fel lehet sorolni egy változólistát, majd a TO, illetve FROM után megadhatjuk, hogy melyik kimenetre írunk ki, illetve honnan olvasunk, végül pedig a BY után megadhatjuk a változók formátumának listáját. A változólista elemeihez a felsorolás sorrendjében lesznek hozzárendelve a formátumlista elemei. Amennyiben több elem van a formátumlistán, akkor a felesleges elemeket nem vesszük figyelembe. Ha a formátumlista végére értünk, de még maradt változónk, amit kiíratnánk, akkor a folyamat a formátumlista elejétől újrakezdődik. Az átvitel mindenképp terminál, amennyiben a változólista végére értünk.
Megjegyzés: Az eddig említett változólista a GET parancs használatára vonatkozik. A PUT parancsnál írhatunk változó helyett kifejezést is, hiszen természetesen nem csak változót írathatunk ki.
A következő felsorolás megmutatja, hogy milyen formátumokkal milyen típusú adatokat tudunk kiíratni, illetve beolvasni (zárójelben a formátum egybetűs rövidítése van, melyet a BY szó utáni részben használhatunk):Példák:
Két változó kiíratása:
Sorrendben: egy 13 karakteres string, egy négyjegyű egész, majd új sorba ugyanígy egy 13 karakteres string, és egy négyjegyű egész kiíratása:
Három változó értékének bekérése a megfelelő formátumot használva