erwthsh perl

Apollon Koutlides apollon at planewalk.net
Fri Apr 8 14:57:41 EEST 2005


Nikos Kanellopoulos wrote:

>> Δοκίμασε αντί γι' αυτό:
>> chomp( @whitelist = <WHITELIST> );
>> και πες μας τι έγινε. Επίσης, η μέθοδος αναζήτησης είναι λίγο 
>> μπρουτάλ... συνιστώ perl hashes.
>
> Δεν έγινε τίποτα. Μάλλον αναμενόμενο

ΚΜΕΚ&trade;
Το *βασικό* πρόβλημά σου ήταν τα newlines στο string, πρέπει να φύγουν 
πριν επιχειρήσεις το comparison.

> Ωστόσο, συνιστάς hashes για να ψάξω τα στοιχεία ενός array για ένα 
> string pattern ??
> Τί θα είναι το key και τι το value; Δε σε καταλαβαίνω.
> Έχω ένα array και κάνω ένα loop για να βρω κάτι στα στοιχεία του.

Όχι, συνιστώ hashes για να ψάξεις τα keys ενός hash, εκτός κι αν 
σκοπεύεις να χρησιμοποιήσεις regexes στο αρχείο του whitelist.

> Εσύ πώς θα έψαχνες ένα array;

Δε θα χρησιμοποιούσα array, θα χρησιμοποιούσα έτοιμα perl hashes ή θα 
υλοποιούσα κάποιο ειδικευμένο για τις ανάγκες μου data structure και 
έναν αντίστοιχο αλγόριθμο αναζήτησης, κατά προτίμηση με complexity 
μικρότερο από αυτόν της σειριακής αναζήτησης σε ένα array...

π.χ.:

use strict;

my $release = 0;
my $whitefile = "whitelist.txt";
my $logfile = "spamlog.txt";

my %whitelist;                          # Global hash to hold the whitelist

{
        open(WHITELIST, '+<', $whitefile)
            or die("Could not open white-list file $whitefile: $!");
        chomp (my @whitelist = <WHITELIST>);
        close WHITELIST;
        @whitelist{@whitelist}=@whitelist;
}

my $address = shift;

if (defined($whitelist{$address})) {
        print "$address in whitelist (extra data: 
".$whitelist{$address}.")\n";
        exit 0;
} else {
        print "$address not in whitelist\n";
        exit 1;
}

Τώρα, αν οι τιμές που θα βάζεις στο whitelist.txt είναι regex patterns, 
προφανώς η δική σου λύση είναι η ενδεδειγμένη. Αν τα regex patterns 
είναι η εξαίρεση και όχι ο κανόνας, θα πρότεινα να χωρίσεις τα regex 
patter σε άλλο αρχείο και να κατασκευάσεις ένα container "method" που 
κάνει δύο αναζητήσεις - μία στο hash με τα μεμονωμένα addresses και μία 
στο array με τα regex patterns. Αυτή η προσέγγιση είναι και η πλέον 
"επεκτάσιμη" στο μέλλον...

Α.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: apollon.vcf
Type: text/x-vcard
Size: 348 bytes
Desc: not available
URL: <http://lists.hellug.gr/pipermail/linux-greek-users/attachments/20050408/a26153a4/attachment.vcf>


More information about the Linux-greek-users mailing list