Dennis Bourn wrote: > Im working on a perl script to add the IP addresses from spam to my > blocked list. Each quarentined email is kept in one directory, the IP > address of the sender is in the first line of the headers. Im using > O'Reilly's "Learning Perl" as a guide and got some parts working. I can > list all the files in the directory eaisy enough,.. i was going to have > that script supply the filename and fire off another script which > searched for the IP in individual files,.. I think its a waste of > processing power to scan the entire file when i just need the first > line. Is there an eaisy way to limit the search to the first line? > > some code > the first one returns each filename in the directory. > ---------------------------- > #!/usr/bin/perl -w > use strict; > my $file; > my $dir = "mail/"; > opendir(BIN, $dir) or die "Can't open $dir: $!"; > while( defined ($file = readdir BIN) ) { > next if $file =~ /^\.\.?$/; # skip . and .. > print "$file\n" if -T "$dir/$file"; > } > closedir(BIN); > ----------------------------- > > the second one searches a single file for IP addresses. (I left in my > failed attempts to get the regex correct,.. figured it might make > someone happy to know that there are worse coders out there than > themselves) > ------------------------------ > #!/usr/bin/perl -w > use strict; > while (<>){ > if (/\d+\.\d+\.\d+\.\d+/){ > #if (/\(*\)/){ #search for anything in brackets > #if (/\d\.\d\.\d\.\d/){ # search for digit.digit.digit.digit > #if (/([1-255]\.[0-255]\.[0-255]\.[0-255])/) { #another atempt > print "$&\n"; > } > } > ------------------------------
#!/usr/bin/perl use warnings; use strict; my $dir = 'mail'; opendir BIN, $dir or die "Can't open $dir: $!"; while ( defined( my $file = readdir BIN ) ) { next unless -f "$dir/$file" and -T "$dir/$file"; open FILE, '<', "$dir/$file" or die "Can't open $dir/$file: $!"; # only read first line of file my ( $ip ) = <FILE> =~ /(\d+\.\d+\.\d+\.\d+)/; close FILE; do_something_with( $ip ); } closedir BIN; John -- Perl isn't a toolbox, but a small machine shop where you can special-order certain sorts of tools at low cost and in short order. -- Larry Wall -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>