Μέχρι τώρα συναντήσαμε μόνο loops (επαναλαμβανόμενες διαδικασίες) όπου υπήρχε ένας έλεγχος τέλους, όπως while ($test ne 3) { κάνε κάτι}. Αν η $test έπαιρνε την τιμή 3 τότε όλα σταματούσαν. Αν στη while δεν δηλώσουμε κάποιον έλεγχο τότε αυτή θα τρέχει για πάντα (infinite loop). Για παράδειγμα:
while ()
{
print "Kolhsameeeeeeeeeeee\n";
}
Εδώ η εκτύπωση είναι:
Kolhsameeeeeeeeeeee
Kolhsameeeeeeeeeeee
Kolhsameeeeeeeeeeee
Kolhsameeeeeeeeeeee
Kolhsameeeeeeeeeeee
Kolhsameeeeeeeeeeee
Kolhsameeeeeeeeeeee
Kolhsameeeeeeeeeeee
Kolhsameeeeeeeeeeee
Kolhsameeeeeeeeeeee
Kolhsameeeeeeeeeeee
Kolhsameeeeeeeeeeee
Kolhsameeeeeeeeeeee
Kolhsameeeeeeeeeeee
Kolhsameeeeeeeeeeee
Kolhsameeeeeeeeeeee
Kolhsameeeeeeeeeeee
Kolhsameeeeeeeeeeee
Kolhsameeeeeeeeeeee
Kolhsameeeeeeeeeeee
K^C
Kolhsameeeeeeeeeeee
Kolhsameeeeeeeeeeee
Kolhsameeeeeeeeeeee
Με Ctrl -C διακόψαμε το πρόγραμμα. Διαφορετικά θα έτρεχε για πάντα.
Επιστροφή στην Κορυφή
Do
Στη while και την until η σύνταξη είναι while ($test ne 3) { κάνε κάτι}. Πρώτα λοιπόν ελέγχουμε και μετά εκτελούμε. Η Do (που στην πραγματικότητα είναι συνάρτηση και γι' αυτό χρειάζεται το ; στο τέλος της while) λειτουργεί ανάποδα. Πρώτα εκτελούμε και μετά ελέγχουμε. Για παράδειγμα:
my $sum = 0;
my $input;
do {
print "Type a number\n";
$input = <STDIN>;
chomp ($input);
$sum = $sum + $input;
} until ($sum > 300);
print "The sum is $sum\n";
Η εφαρμογή μας θα ζητάει την εισαγωγή νέων αριθμών όσο το until είναι αληθές. Θα σταματήσει λοιπόν μόνο όταν το $sum πάρει τιμή μεγαλύτερη από 300. Αν αντί για until ($sum > 300) δηλώσουμε while ($sum > 300) το loop θα τρέξει μόνο μια φορά αν η πρώτη τιμή που δηλώσουμε είναι 300 ή μικρότερη! Αυτό συμβαίνει επειδή το while loop εκτελείται μόνο αν ισχύει ό,τι έχει δηλωθεί σε αυτό. Αν λοιπόν το πρώτο $input είναι 300 ή μικρότερο, τότε δεν ισχύει το $sum > 300 και το loop διακόπτεται. Αν πάλι είναι μεγαλύτερο από 300 τότε θα κρατήσει για πάντα (infinite loop).