Rob Dixon wrote:
>
> Marco wrote:
> > On Wed, Jan 22, 2003 at 01:07:19PM -0000, Rob Dixon
> > <[EMAIL PROTECTED]> wrote:
> >
> >> push @files, join ' and ', delete @files[-2,-1];
> >
> > Your program successfully matches the entries, prints in which files
> > the string is found:
> >
> > Zone foo.com was found in files and boot.fixed
> >
> > But it also prints the following warnings:
> > Use of uninitialized value in join or string at checkdomain.pl line
> > 19, <> line 1.
>
> Sorry, I didn't account for the cases where the zone was found in
> less than two files!
>
> while (<>) {
> chomp;
> if ($files = $zone{$_}) {
> if ((my @files = @$files) >= 2) {
> push @files, join ' and ', delete @files[-2,-1];
> }
> print "Zone $_ was found in files ", join (', ', @files),
> "\n";
> } else {
> print "Zone $_ was not found\n";
> }
> }
How about this: :-)
use strict;
use warnings;
my %zone;
# get zone names from named.conf type files
@ARGV = qw( one.txt two.txt three.txt );
/^zone\b[^"]*"([^"]+)/ and push @{$zone{$1}}, "$ARGV, " while <>;
# adjust output format
for ( keys %zone ) {
$zone{x}[-1] =~ s/, $//;
$zone{x}[-2] =~ s/, $/ and / if @{$zone{x}} > 1;
}
# report which zone names were found
@ARGV = 'zonelist.input';
while ( <> ) {
chomp;
if ( @{$zone{$_}} ) {
print "Zone $_ was found in files ", @{$zone{$_}}, "\n";
}
else {
print "Zone $_ was not found\n";
}
}
__END__
John
--
use Perl;
program
fulfillment
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]