Στον κώδικα που ακολουθεί επεκτείνουμε ένα παλαιότερο παράδειγμά μας έτσι ώστε το πρόγραμμα να ψάχνει για γραμμές που περιέχουν τη λέξη «αποδοτικά» σε περισσότερα από ένα αρχεία:
#!/usr/bin/perl -w
use strict;
my $file_directory = '/home/gepiti/temp';
Ξεκινούμε δηλώνοντας στην Perl το directory μέσα στο οποίο βρίσκονται τα αρχεία μας.
my @list_of_files = ('whatnew.htm', 'whatnew2.htm');
Στην συνέχεια δηλώνουμε την array μεταβλητή (τη @list_of_files) και τα αρχεία που περιέχει. (Στην περίπτωσή μας αυτά είναι μόνο δύο.)
foreach my $filename (@list_of_files) {
Στα αγγλικά for each σημαίνει «για καθένα». Για την Perl η παραπάνω γραμμή κώδικα ότι κάποια εργασία (αυτή που περιέχεται μέσα στην αγκύλη που ακολουθεί) πρέπει να εκτελεστεί για κάθε ένα από τα αρχεία που περιέχει η @list_of_files.
Προσέξτε τη σύνταξη η οποία είναι:
(foreach) (δήλωση scalar variable) (array variable) {κάνε αυτό}
Αυτό που λέμε στην Perl είναι ότι τις τιμές της σειράς @list_of_files πρέπει να τις διαχειριστεί μια μια. Έτσι, το πρώτο πράγμα δηλώνουμε μετά την foreach είναι τη μεταβλητή (εδώ την $filename) η οποία θα πάρει μια μια όλες τις τιμές της σειράς (@list_of_files) και θα κάνει κάτι (ό,τι ορίσουμε στα άγκιστρα).
open (FILE, "$file_directory/$filename") or die "can't open $filename $!";
Στο προηγούμενο παράδειγμα είχαμε δώσει απλώς το όνομα του αρχείου μια και αυτό βρισκόταν στον ίδιο φάκελο με το πρόγραμμά μας. Αυτό όμως σπάνια συμβαίνει στην πράξη. Εδώ δηλώνουμε το πλήρες path "$file_directory/$filename" και φυσικά στην πρόβλεψη για debugging (εύρεση και διόρθωση σφαλμάτων) δηλώνουμε can't open $filename $!"; Έτσι ώστε μάθουμε αμέσως ποιο είναι το αρχείο που παρουσιάζει πρόβλημα.
while (<FILE>) {
if (m/αποδοτικά/) {
κατά τα γνωστά
print "$filename:\n$_";
Η μικρή προσθήκη που κάναμε εδώ σε σχέση με το προηγούμενο παράδειγμα είναι ότι το πρόγραμμα θα μας εμφανίσει όχι μόνο τη γραμμή στην οποία βρέθηκε η λέξη αποδοτικά, αλλά και το όνομα του αρχείου, πράγμα απαραίτητο αφού εδώ έχουμε περισσότερα από ένα αρχεία.
}
}
close FILE;
}
κατά τα γνωστά.
Ο πλήρης κώδικας του προγράμματος είναι:
#!/usr/bin/perl -w
use strict;
my $file_directory = '/home/gepiti/temp';
my @list_of_files = ('whatnew.htm', 'whatnew2.htm');
foreach my $filename (@list_of_files) {
open (FILE, "$file_directory/$filename") or die "can't open $filename $!";
while (<FILE>) {
if (m/αποδοτικά/) {
print "$filename:\n$_";
}
}
close FILE;
}