erwthsh perl
Apollon Koutlides
apollon at planewalk.net
Fri Apr 8 14:57:41 EEST 2005
Nikos Kanellopoulos wrote:
>> Δοκίμασε αντί γι' αυτό:
>> chomp( @whitelist = <WHITELIST> );
>> και πες μας τι έγινε. Επίσης, η μέθοδος αναζήτησης είναι λίγο
>> μπρουτάλ... συνιστώ perl hashes.
>
> Δεν έγινε τίποτα. Μάλλον αναμενόμενο
ΚΜΕΚ™
Το *βασικό* πρόβλημά σου ήταν τα 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