2 # This program searches for the given Perl regular expression in a Zip archive.
3 # Archive is assumed to contain text files.
4 # By Ned Konz, perl@bike-nomad.com
6 # perl zipGrep.pl 'pattern' myZip.zip
9 use Archive::Zip qw(:CONSTANTS :ERROR_CODES);
14 This program searches for the given Perl regular expression in a Zip archive.
15 Archive is assumed to contain text files.
17 perl $0 'pattern' myZip.zip
23 $pattern = qr{$pattern}; # compile the regular expression
26 my $zip = Archive::Zip->new();
27 if ( $zip->read($zipName) != AZ_OK )
29 die "Read error reading $zipName\n";
32 foreach my $member ( $zip->members() )
34 my ( $bufferRef, $status, $lastChunk );
35 my $memberName = $member->fileName();
38 $member->desiredCompressionMethod(COMPRESSION_STORED);
39 $status = $member->rewindData();
40 die "rewind error $status" if $status != AZ_OK;
42 while ( !$member->readIsDone() )
44 ( $bufferRef, $status ) = $member->readChunk();
45 die "readChunk error $status"
46 if $status != AZ_OK && $status != AZ_STREAM_END;
48 my $buffer = $lastChunk . $$bufferRef;
49 while ( $buffer =~ m{(.*$pattern.*\n)}mg )
51 print "$memberName:$1";
53 ($lastChunk) = $$bufferRef =~ m{([^\n\r]+)\z};