Ας υποθέσουμε ότι μας έδωσαν το αρχείο δεδομένων kairos.txt που περιέχει τα ακόλουθα:
Athens:-4:40:
Thessaloniki:-7:35:
Patra :19:80:
Larrisa:04:16:
Volos:32:55:
Karditsa:12:50:
Psaxna:14:32:
Kamena Vourla :10:20:
Κάθε γραμμή εδώ αναφέρει το όνομα της πόλης, τη χαμηλότερη και τη μεγαλύτερη θερμοκρασία της. Το αρχείο μας είναι ASCII delimited και delimiter είναι το :
Αυτό που θέλουμε να κάνουμε είναι να τυπώσουμε τα περιεχόμενα του αρχείου υπολογίζοντας ταυτόχρονα και τον μέσο όρο. Ας δούμε πώς:
#!/usr/bin/perl -w
use strict;
print " Kalosirthate \n";
open (FILE,'kairos.txt') || die "Den mporo na to anoikso\n $!" ;
Κατά τα γνωστά.
while (<FILE>)
{
my @temaxio = split (/:/,$_);
Η Perl διαβάζει το αρχείο γραμμή γραμμή (μια κάθε φορά) και τοποθετεί το περιεχόμενο στη scalar μεταβλητή $_. Εμείς σπάμε αυτή τη scalar σε μια λίστα με σημείο χωρισμού τον delimiter (το : ). Έτσι κάθε τιμή βρίσκεται τώρα σε ένα ξεχωριστό στοιχείο της array @temaxio
my $mesos = ($temaxio[1]+$temaxio[2])/2;
Υπολογίζουμε τον μέσο όρο.
print " H $temaxio[0] me mikri $temaxio[1] kai megali $temaxio[2] exei meso oro $mesos\n";
Τυπώνουμε το αποτέλεσμα της γραμμής.
}
Το loop ολοκληρώνεται και ξαναρχίζει από την αρχή με την επόμενη γραμμή του kairos.txt
Λίγο διαφορετική θα είναι η προσέγγισή μας αν το αρχείο (που τώρα λέγεται kairos2.txt) έχει την ακόλουθη (επίσης πολύ συνηθισμένη μορφή):
Athens
-4
40
Thessaloniki
-7
35
Patra
19
80
Larrisa
04
16
Volos
32
55
Karditsa
12
50
Psaxna
14
32
Kamena Vourla
10
20
Εδώ το πρόγραμμά μας θα είναι:
#!/usr/bin/perl -w
use strict;
print " Kalosirthate \n";
open (FILE,'kairos2.txt') || die "Den mporo na to anoikso\n $!" ;
Κατά τα γνωστά.
my $count ;
Η μεταβλητή αρίθμησης. Με αυτή θα παρακολουθούμε σε ποια σειρά του αρχείου βρισκόμαστε.
my $polis;
Όνομα πόλης.
my $max;
Μέγιστη θερμοκρασία.
my $min;
Ελάχιστη θερμοκρασία
while (<FILE>)
{
$count++;
Η $count αυξάνει κατά μια μονάδα.
if ($count == 1)
{
$polis = $_;
Αν η $count είναι ίση με 1 (προσοχή στα δύο ίσον) τότε η $_ περιέχει το όνομα της πόλης.
chomp $polis;
}
Πιθανόν να έχει πατηθεί Enter μετά την εισαγωγή του ονόματος της πόλης. Γι αυτό το καθαρίζουμε με το chomp.
elsif ($count == 2)
{
$min = $_;
chomp $min;
}
Αν η $count είναι ίση με 2 τότε βρισκόμαστε παρακάτω (έχει ήδη προηγηθεί άλλο πέρασμα του loop) και η $_ περιέχει την ελάχιστη θερμοκρασία.
else
{
$max = $_;
chomp $max;
Διαφορετικά η $_ μας εμφανίζει τη μέγιστη θερμοκρασία.
my $mesos = ($min+$max)/2;
print " H $polis me mikri $min kai megali $max exei meso oro $mesos\n";
Αν συμβαίνει αυτό τότε έχουμε ήδη όσα στοιχεία χρειαζόμαστε για να υπολογίσουμε τον μέσο όρο θερμοκρασίας αυτής της πόλης.
$count =0;
}
Η τιμή της $count γίνεται πάλι μηδέν και ξεκινάμε με την επόμενη γραμμή που περιέχει το όνομα (και παρακάτω τα στοιχεία) μιας άλλης πόλης.
}
Το πρόγραμμά μας έχει τώρα ολοκληρωθεί.