7. Kontrola przepływu

Perl ma wszystkie struktury kontroli przepływu, które są w normalnym języku procedur, jak również kilka dodatkowych.

7.1. If-Then-Else

W Perlu jest podobnie jak w C. Używa się tu tych samych operatorów: "&&" to "i", "||" - lub, "!" zaś to negacja. Jedyna różnica jest brak jednolinijkowego wykonania warunku. To znaczy zamiast:

	if (error < 0)
	    fprintf(stderr,"Blad o kodzie %d\n",error);
należy w Perlu zapisać:

	if ($error < 0)
	{ print STDERR "Błąd o kodzie $error\n"; }
Natomiast odpowiednikiem dwóch słów w C else if jest w Perlu słowo elsif, poza tym istnieje słowo przeciwstawne unless. Na przykład:

	unless ($#ARGV > 0)	# czy są jakieś argumenty
	{ print "Błąd, brak argumentow\n"; exit 1; }
Idea wartości logicznych jest identyczna do C. Zero to fałsz, nie zero prawda. Pusty ciąg znaków - fałsz, o długości 1 lub więcej - prawda. Wektory i ich skojarzone odpowiedniki o ilości elementów 0 - fałsz, więcej - prawda. Nie istniejące zmienne, maja z definicji wartość zero, czyli fałszu. W Perlu nie istnieje konstrukcja case, lecz zamiast niej są inne.

7.2. Konstrukcja while

W Perlu while ma różnorakie zastosowania. Na przykład warunkiem może być wywołanie funkcji (wyświetlanie tekstu wpisanego z klawiatury):

	while (<STDIN>)
	{
		print "wpisałeś ",$_;
	}
Powyższy kod napisany przez początkującego powinien wyglądać następująco:

	while ($_ = <STDIN>)
	{
		print "wpisałeś ",$_;
	}
Poniżej przykład na wartość logiczna wektora:

	@users = ("nigel","david","derek","viv");
	while (@users)
	{
	 	$user = shift @users;
	 	print "$user ma konto\n";
	 }
Pętla while będzie wykonywana dopóki @users będzie miał choć jeden element. Funkcja shift zwraca pierwszy element z @users i wyrzuca go z wektora @users. Ponadto można używać next - odpowiednika continue z C, oraz last - break.

7.3. Konstrukcja for i foreach

Te konstrukcje w Perlu są równoważne. Zasadniczo są dwa sposoby użycia for/foreach. Pierwszy, podobny do C:

	@disks = ("/data1","/data2","/usr","/home");
	for ($i=0; $i <= $#disks; ++$i)
	{ print $disks[$i],"\n"; }
Jeśli się zrozumie wbudowana zasadę iteracji wektorów w Perlu nie będzie potrzeby używania powyższej konstrukcji. Jednoargumentowe wywołanie foreach jest podobne jak w C shellu. Jest tu wyraźna różnica pomiędzy odpowiednią konstrukcją while - shift, która kolejno wyrzuca elementy z wektora. Dla przykładu odpowiednik powyższego kodu :

	@disks = ("/data1","/data2","/usr","/home");
	foreach(@disks)
	{ print $_,"\n"; }
Należy zauważyć jest to bardziej zwięzłe i nie niszczy zawartości @disks, poza tym $_ jest wskaźnikiem, a nie kopią, zatem jeśli w kodzie zmienimy $_ to zmieni się także wektor.

7.4. GOTO

Konstrukcja goto etykieta - skieruje bieg programu do określonej etykiety. Podobnie jak w innych językach nie zaleca się stosować goto.