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