Archive-Zip
view release on metacpan or search on metacpan
lib/Archive/Zip/Archive.pm view on Meta::CPAN
package Archive::Zip::Archive;
# Represents a generic ZIP archive
use strict;
use File::Path;
use File::Find ();
use File::Spec ();
use File::Copy ();
use File::Basename;
use Cwd;
use Encode qw(encode_utf8 decode_utf8);
use vars qw( $VERSION @ISA );
BEGIN {
$VERSION = '1.68';
@ISA = qw( Archive::Zip );
}
use Archive::Zip qw(
:CONSTANTS
:ERROR_CODES
:PKZIP_CONSTANTS
:UTILITY_METHODS
);
our $UNICODE;
our $UNTAINT = qr/\A(.+)\z/;
# Note that this returns undef on read errors, else new zip object.
sub new {
my $class = shift;
# Info-Zip 3.0 (I guess) seems to use the following values
# for the version fields in the zip64 EOCD record:
#
# version made by:
# 30 (plus upper byte indicating host system)
#
# version needed to extract:
# 45
my $self = bless(
{
'zip64' => 0,
'desiredZip64Mode' => ZIP64_AS_NEEDED,
'versionMadeBy' => 0,
'versionNeededToExtract' => 0,
'diskNumber' => 0,
'diskNumberWithStartOfCentralDirectory' =>
0,
'numberOfCentralDirectoriesOnThisDisk' =>
0, # should be # of members
'numberOfCentralDirectories' => 0, # should be # of members
'centralDirectorySize' => 0, # must re-compute on write
'centralDirectoryOffsetWRTStartingDiskNumber' =>
0, # must re-compute
'writeEOCDOffset' => 0,
'writeCentralDirectoryOffset' => 0,
'zipfileComment' => '',
'eocdOffset' => 0,
'fileName' => ''
},
$class
);
$self->{'members'} = [];
my $fileName = (ref($_[0]) eq 'HASH') ? shift->{filename} : shift;
if ($fileName) {
my $status = $self->read($fileName);
return $status == AZ_OK ? $self : undef;
}
return $self;
}
sub storeSymbolicLink {
my $self = shift;
$self->{'storeSymbolicLink'} = shift;
}
sub members {
@{shift->{'members'}};
}
sub numberOfMembers {
scalar(shift->members());
}
sub memberNames {
my $self = shift;
return map { $_->fileName() } $self->members();
}
# return ref to member with given name or undef
sub memberNamed {
my $self = shift;
( run in 0.526 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )