There are cleaner and shorter ways to code this, but since (1) you say you're new to Perl, (2) I don't want to confuse any obvious issues and (3) I think the following makes the solution more obvious, I'm coding *everything* in a straightforward manner.
Pay particular attention the comments. You haven't made your particular situtation (file formats, etc.) completely known, so I've made some assumptions.
At the very least, this should provide a good starting point. Good luck!
#!/usr/bin/perl -w
#
# note: this assumes that each line in email_list.txt contains only
# one email address
use strict;
open (EMAIL, "< email_list.txt") || die "cannot open email_list.txt: $
+!"; #open email address file
while (my $email_address = <EMAIL>) {
chomp($email_address);
open (OUT, ">$email_address.txt") || die "cannot open $email_addre
+ss: $!";
open (JOHN, "< john.txt") || die "cannot open john.txt: $!";
while (my $main_input = <JOHN>) {
chomp($main_input);
if ($main_input =~ /email=/) {
# matching email addresses is tricky, so YMMV on the #
+ following
$main_input =~ s/([a-zA-Z0-9]{3})\@([a-zA-Z0-9\.\-]*)\
+%?.*$/$email_address/;
}
print OUT "$main_input\n";
}
close JOHN;
close OUT;
}
close EMAIL;
Update: Added close EMAIL;
If things get any worse, I'll have to ask you to stop helping me. |