package Archive::Peek::Zip; use Moose; use Archive::Zip qw(AZ_OK); use Archive::Zip::MemberRead; extends 'Archive::Peek'; sub zip { my $self = shift; my $filename = $self->filename; my $zip = Archive::Zip->new(); unless ( $zip->read( $filename->stringify ) == AZ_OK ) { confess("Error reading $filename"); } return $zip; } sub files { my $self = shift; my $zip = $self->zip; my @members = $zip->members(); my @files = sort map { $_->fileName } grep { !$_->isDirectory } @members; return @files; } sub file { my ( $self, $filename ) = @_; my $zip = $self->zip; my $fh = Archive::Zip::MemberRead->new( $zip, $filename ); my $file = ''; while (1) { my $read = $fh->read( my $buffer, 1024 ); die "FATAL ERROR reading my secrets !\n" if ( !defined($read) ); last if ( !$read ); $file .= $buffer; } return $file; } 1;