Here's one way to do it:
for (;;) {
($user,$home) = (getpwent)[0,7];
last unless $user;
next unless open(N,"$home/.newsrc");
next unless -M N < 30; ## added value :-)
while (<N>) {
if (/^comp\.lang\.perl\.announce:/) {
print "$user is a good person, ",
"and reads comp.lang.perl.announce!\n";
last;
}
}
}
The outermost loop is a for
loop that runs forever; this loop gets exited by the last
operator inside, however. Each time through the loop, a new value for $user
(a username) and $home
(their home directory) is fetched using the getpwent
operator.
If the value of $user
is empty, the for
loop exits. The next two lines look for a recent .newsrc file in the user's home directory. If the file cannot be opened, or the modification time of the file is too distant, the next iteration of the for
loop is triggered.
The while
loop reads a line at a time from the .newsrc file. If the line begins with comp.lang.perl.announce:, the print
statement says so, and the while
loop is exited early.