erwthsh perl
Giorgos Keramidas
keramida at ceid.upatras.gr
Fri Apr 8 15:01:14 EEST 2005
On 2005-04-08 13:01, Nikos Kanellopoulos <nkan at panafonet.gr> wrote:
>
> Στο παρακάτω πολύ απλό σκριπτάκι, το run
> $ ./debug.pl abc
> θα έπρεπε να επιστρέφει την τιμή 1, που όμως δεν συμβαίνει.
> Το πρόβλημα προφανώς έγκειται στο if της συνάρτησης
> is_in_white(). Καταλαβαίνει κανείς πού είναι το λάθος;;
Σου λείπει ένα chomp κάπου. Φαίνεται αμέσως αυτό αν το print() που
έχεις μέσα στην is_in_white() το αλλάξεις σε:
print "[ pattern, address ] = [ $pattern, $address ]\n" unless $release;
> #!/usr/bin/perl
>
> use strict;
>
> my $release = 0;
> my $whitefile = "whitelist.txt";
> my $logfile = "spamlog.txt";
>
> my @whitelist; # the list of valid senders
> open(WHITELIST, '+<', $whitefile)
> or die "Could not open white-list file $whitefile: $!\n";
> @whitelist = <WHITELIST>;
>
> my $string = shift;
>
> print "\nis_in_white($string) returned: ", is_in_white($string), "\n";
>
> sub is_in_white() {
> my $address = shift;
> print "address: $address\n" unless $release;
> foreach my $pattern (@whitelist) {
> print "pattern: $pattern" unless $release;
> if ($address =~ m/$pattern/) {
> print "$address matches $pattern\n";
> return 1;
> }
> }
> return 0;
> }
Εγώ πάλι, το ίδιο πράγμα θα το έκανα με ένα hash, όπως είπε κι ο
Απόλλωνας σε προηγούμενο post:
: #!/usr/bin/perl -w
:
: use strict;
:
: #
: # There's no point in running anything below, if we have no addresses to check
: # against our whitelist.
: #
:
: die "usage: check-whitelist.pl addr [...]\n"
: if ($#ARGV == -1);
:
: #
: # Default file paths.
: #
:
: my $whitefile = "whitelist.txt";
: my $logfile = "whitelist.log";
:
: #
: # Let environment variables override the defaults.
: #
:
: my $env_whitefile = $ENV{WHITE_FILE};
: my $env_logfile = $ENV{WHITE_LOG};
:
: $whitefile = $env_whitefile if (defined($env_whitefile));
: $logfile = $env_logfile if (defined($env_logfile));
:
: #
: # Slurp in the list of valid senders and build a hash from it.
: # E-mail addresses are case insensitive, so the hash keys are all lowercase.
: #
:
: my %whitelist;
: my $line;
:
: open(WHITELIST, "<$whitefile")
: or die "open:${whitefile}: $!";
: while (defined($line = <WHITELIST>)) {
: chomp $line;
: $whitelist{lc($line)} = 1;
: }
: close WHITELIST;
:
: #
: # Check command line arguments against the keys of %whitelist.
: #
:
: my $arg;
: foreach $arg (@ARGV) {
: chomp $arg;
: if (defined($whitelist{lc($arg)})) {
: print "allow $arg\n";
: } else {
: print "block $arg\n";
: }
: }
More information about the Linux-greek-users
mailing list