Στο προηγούμενο παράδειγμα θα παρατηρήσατε ότι μια μια γραμμή ($_) του αρχείου ελεγχόταν από την Perl και γίνονταν οι απαραίτητες αντικαταστάσεις. Η $_ είναι μια scalar μεταβλητή. Υπάρχουν όμως περιπτώσεις που εμείς θέλουμε να κάνουμε αλλαγές σε όλες τις τιμές μιας λίστας. Αυτό μπορεί να γίνει με την εντολή for που λειτουργεί με τρόπο ανάλογο της foreach. Αντί λοιπόν να πραγματοποιούμε τις αλλαγές μας σε μια μια τιμή, παίρνουμε ολόκληρη τη λίστα και δηλώνουμε:
for (@page_stats)
{
s/.asp (\w)/.asp?$1/;
s/asp - /asp /;
s/.htm -/.htm/;
}
Σε κάθε τιμή της λίστας λοιπόν εκτελούνται όλες οι εντός των αγκίστρων εργασίες.
Ολόκληρος ο κώδικας του τροποποιημένου πλέον προγράμματος είναι ο:
#!/usr/bin/perl -w
use strict;
my $file = '/mnt/win_e/Ex0204.txt'; # To log file
my $statfile = 'data.txt'; # To target file
my @page_stats; # Statistika poy exoyn na kanoyn me web selides
open (LOGFILE, "$file") || die "can't open file: $!";
while (<LOGFILE>) {
if ($_ =~ /gif/)
{
my $do_nothing=1;
}
elsif ($_ =~ /jpg/)
{
my $do_nothing=2;
}
elsif ($_ =~ /swf/)
{
my $do_nothing=3;
}
elsif ($_ =~ /css/)
{
my $do_nothing=4;
}
elsif ($_ =~ /exe/)
{
my $do_nothing=5;
}
else
{
push (@page_stats, $_);
}
}
for (@page_stats)
{
s/.asp (\w)/.asp?$1/;
s/asp - /asp /;
s/.htm -/.htm/;
}
close (LOGFILE);
open (WRITEFILE, "+>$statfile") or die "can't open file: $!";
my $old_output = select;
select WRITEFILE;
print "@page_stats;\n";
select $old_output;
print "edo eimaste pali\n";