Η προηγούμενη εφαρμογή λειτουργεί μόνο μια φορά και επαναλαμβάνει τον εαυτό της αποκλειστικά στην περίπτωση που ο χρήστης έδωσε λανθασμένα στοιχεία. Εδώ θα τοποθετήσουμε ένα μενού επιλογών στο τέλος της έτσι ώστε ο χρήστης να επιλέγει αν θέλει να δώσει άλλα στοιχεία ή να την εγκαταλείψει.
Μια καλογραμμένη εφαρμογή είναι απλή και διαθέτει μεγάλη ευελιξία. Ο κώδικας λοιπόν δεν θα είναι πολύ διαφορετικός:
#!/usr/bin/perl -w
use strict;
print "---------------------------------------------------------------\n";
print " KALOSILΘES STHN EFARMOGH THS ALITHIAS GIA THN ILIKIA SOU \n";
print "---------------------------------------------------------------\n";
my $quit = 1;
while ($quit == 1)
{
my $ilikia;
print " GRAPSE THN ILIKIA SOU:\n";
$ilikia = <STDIN>;
chomp ($ilikia);
if ( $ilikia eq '')
{
print "Prepei na grapshs kati\n";
}
elsif ( $ilikia =~ m/^-\d+$/)
{
print "EISE AGENITOS\n";
}
elsif ($ilikia =~ m/\D/)
{
print "LES ANOHSIES\n";
}
else
{
if ( $ilikia >=1 and $ilikia <= 15 )
{
print "Eisai moro\n";
}
elsif ( $ilikia > 15 && $ilikia <= 19 )
{
print "Eisai gematos spirakia\n";
}
elsif ( $ilikia > 19 && $ilikia <= 35 )
{
print "Eisai ATOMO\n";
}
elsif ( $ilikia > 35 && $ilikia <= 999 )
{
print "Eisai apokliros kai ora na doseis topo stous neous\n";
}
else
{
print "LES ANOHSIES\n";
}
Στην προηγούμενη εφαρμογή εδώ υπήρχε ένα $quit=2 ώστε να διακόπτεται το loop. Τώρα το αφαιρέσαμε και η Perl συνεχίζει να διαβάζει ό,τι υπάρχει παρακάτω.
}
Μόλις τελείωσε το μεγάλο else που περιέχει όλες τις αποδεκτές τιμές που μπορεί να μας δώσει ο χρήστης. Η Perl λοιπόν συνεχίζει εκτελώντας ό,τι υπάρχει παρακάτω.
my $grapse;
print "Gia na ksanagrapseis THN ILIKIA SOU type G \n";
print "Gia na bgeis type X \n";
$grapse = <STDIN>;
chomp ($grapse);
Ενημερώνουμε τον χρήστη για τις επιλογές του και του ζητάμε να εισάγει εκείνη που επιθυμεί:
if ( $grapse eq 'g')
{
}
Αν γράψει g, δηλαδή θέλει να συνεχίσει δεν δηλώνουμε τίποτε. Η $quit λοιπόν παραμένει 1 και όσα βρίσκονται μέσα στη while θα ξαναρχίσουν από την αρχή.
elsif ( $grapse eq 'x')
{
$quit = 3;
}
Ο χρήστης έδωσε x, άρα δίνουμε στην $quit τιμή διαφορετική του 1 για να διακοπεί η while (και μαζί της το πρόγραμμα αφού δεν υπάρχει κάτι άλλο παρακάτω).
else
{
print "Eprepe na grapseis g or x. H efarmogh ksanarxizei...\n";
print "\n";
}
Αν ο χρήστης μας έδωσε κάτι άλλο του διαμαρτυρόμαστε και ξαναρχίζουμε από την αρχή. (Χρησιμοποιήσαμε το print "\n" για να αφήσουμε μια κενή γραμμή μεταξύ της διαμαρτυρίας και της γραμμής εισαγωγής των νέων δεδομένων.)
}
Το άγκιστρο αυτό σηματοδοτεί το τέλος της while.