Pętle pozwalają na ogromną oszczędność czasu przy pisaniu kodu. Można je zaliczyć do poleceń wpływających na logikę programu. Jeśli mamy jakiekolwiek doświadczenie programistyczne, koncepcja pętli powinna być nam dobrze znana. Jeśli jednak takiego doświadczenia nie mamy, warto się nauczyć, jak je stosować.
Wszystkie pętle w Perlu wyglądają mniej więcej następująco:
słowo kluczowe pętli (instrukcje) {
grupa instrukcji
}
W pętli można wstawić inne pętle, instrukcje if/else lub cokolwiek innego.
Pętla for
Pętla "for" (z ang. dla) jest najbardziej skomplikowana pod względem syntaktycznym z wszystkich pętli w Perlu. Można ją jednak spotkać w wielu językach programowania, więc możemy stwierdzić, iż jest to narzędzie bardzo wygodne. Wygląda ona następująco:
for ($i=0; $i<10; $i++) {
print "$i\n";
}
W pętli tej deklarujemy zmienną, która istnieje TYLKO wewnątrz pętli. W tym przypadku wykorzystaliśmy popularną w takich zastosowaniach zmienną $i (od słowa indeks - przyp. tłum.). Można oczywiście użyć dowolnej innej nazwy zmiennej - to sprawa gustu.
Zmienna tymczasowa zwiększa swoją wartość o 1 po każdym cyklu pętli (za każdym razem, kiedy wykonywane są zawarte w pętli instrukcje - przyp. tłum.). Na początku jednak upewniamy się, że $i będzie równe 0 - oczywiście możemy ustalić dowolną inną wartość początkową. Następne polecenie ustawia warunek pętli tak, by wykonywana była ona jedynie, jeśli $i jest mniejsze od 10, tak więc pętla wykona tylko 10 cykli. Ostatnia część w nawiasach to $i++, co oznacza, że po każdym cyklu pętli wartość $i zwiększy się o 1. W samej pętli znajduje się jedynie komenda print, która wyświetla obecną wartość $i i znak przejścia do następnej linii. Wykorzystaliśmy ją tylko po to, by widoczna była zmiana wartości $i w każdym cyklu pętli.
Pętle while i until
Pętle "while" i "until" (z ang. dopóki i aż) są bardzo zbliżone do instrukcji if i unless. Sprawdzają one warunek w nawiasach i jeśli jest on prawdziwy - w przypadku while, lub też fałszywy - w przypadku until, pętla jest wykonywana. Pętle te są podobne w zasadzie do pętli for, ale nie aż tak bardzo ograniczone, jak ona.
Należy jednak pamiętać o fakcie, że pętle te mogą być niebezpieczne. W ich przypadku istnieje duże prawdopodobieństwo, że nigdy się nie zatrzymają. W przeciwieństwie do pętli for nie opierają się one bowiem na żadnych testach wartości zmiennej tymczasowej. Musi ona być zadeklarowana poza pętlą i zmieniana w pętli. Może to wymagać trochę praktyki. Składnia pętli while i until wygląda następująco:
$liczba = 0;
while ($liczba < 10) {
print "$liczba\n";
$liczba++;
}
$liczba = 0;
until ($liczba >= 10) {
print "$liczba\n";
$liczba++;
}
Pętla foreach
Pętla "foreach" (z ang. dla każdego) jest bardzo użyteczna, a odwołuje się do wartości tablic. Jej składnia wygląda następująco:
foreach $wartosc (@tablica) {
print "$wartosc";
}
Możemy ją nazwać "leniwą wersją pętli for". Pętla ta pobiera każdą wartość z tablicy @tablica, odwołując się do niej przez zmienną $wartosc i wykonuje stosowne komendy. Każda wartość jest przetwarzana tylko jeden raz. Można oczywiście zastosować dowolną nazwę zmiennej referencyjnej. Ta technika przydaje się bardzo w przypadku tablic asocjacyjnych, czyli tablic haszowanych. W ich przypadku składnia wygląda następująco:
foreach $klucz (keys %tablica) {
print "wartość dla $klucz to: $tablica{$klucz}\n";
}
Podobnie, jak w przypadku pętli foreach dla normalnej tablicy, pętla ta pobiera każdy klucz z tablicy haszowanej i wyświetla przypisaną mu wartość.