A nyelv explicit módon nem definiál vezérlési szerkezeteket. Viszont a programozónak lehetősége van ezeket megkerülni.
Létezik néhány APL disztribúció, amely támogat számos vezérlési struktúrát (APLX, APL2000, stb).
APL-ben vezérlés átadására a … szimbólumot használjuk. Az elágazás lehet feltétel nélküli vagy feltételes.
A … szimbólumot egész skalár, vektor vagy címke követheti, amely az ugrás sorát jelöli ki. Vektor esetében a legelső elem van figyelembe véve.
Ha az ugrandó sorszám nem létezik, a függvény futása terminál. Gyakran erre a célra a 0-át használják. Ha a sorszám egy üres vektor, a futás folytatódik a következő kifejezéssel.
Ugrás a 10-es sorból vissza a 3-as sorba
[10] …3
A címkét egy kettőspont követi és a sor elején helyezkedik el. A címke futásidőben lokális változóként viselkedik. Értéke pedig a sor száma, ahol definiálva lett. Az ugró operátor után közvetlenül használható.
Feltétel nélküli elágazás a LAB2-es címkével jelölt sorra:
[10] …LAB2
[11] ...
[12] LAB2:TOTAL„QTY×PRICE
Feltételes elágazás az argumentum futásidejű változtatásával programozható le.
Elágazás a LAB2 sorra, ha a LOOP értéke 10.
A kifejezés egy üres vektort ad eredményül, ha értéke hamis, különben a címke értékét
[10] …(LOOP=10)/LAB2
[11] ...
[12] LAB2:TOTAL„QTY×PRICE
Többirányú elágazás az INDEX értéke alapján
[6] …(CASE1 CASE2 CASE3)[INDEX]
Többirányú elágazás egy boolean vekor segítségével, ahol az ugrandó sort az első 1-es érték határozza meg. Ha nincs egy nullától különböző érték sem, akkor a szöveg kiíródik és a függvény futása terminál
[6] …SELECT/(CASE1 CASE2 CASE3) Ş 'No case applies' Ş …0
Speciális esetként merül fel az argumentum nélküli ugró operátor. Hatására az aktuális és az őt hívó összes függvény futása terminálódik.
A ciklust következőképpen definiálhatunk:
[0] loop_fn
[1] i„0
[2] BEGIN:
[3] i„i+1
[4] (ciklusmag)
[n] …<(i<=10)/BEGIN