[eeei.gr Logo]
Επικοινωνία
Ταυτότητα
Μαθήματα Internet | Μαθήματα Προγραμματισμού | Net Business | Τα νέα του Internet | Ο Κόσμος του Αύριο

Αντικαταστάσεις μέσα σε λίστες

Στο προηγούμενο παράδειγμα θα παρατηρήσατε ότι μια μια γραμμή ($_) του αρχείου ελεγχόταν από την 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";


Τρέχουσα Ενότητα: Perl


 

Φιλικά - συνεργαζόμενα sites: Left Handed Products


© Eeei.gr 2009