use strict; use Archive::Zip qw( :ERROR_CODES :CONSTANTS ); my $oldfile = 'oldzip.zip'; my $newfile = 'newzip.zip'; my $oldzip = Archive::Zip->new(); $oldzip->read($oldfile) == AZ_OK or die 'read error'; my $newzip = Archive::Zip->new(); # Getting the list of selected files my @FileMembers123 = $oldzip->membersMatching("123.*\.xml"); foreach my $file (@FileMembers123) { $oldzip->extractMember($file); $newzip->addFile($file); } $newzip->writeToFileNamed( $newfile ) == AZ_OK or die 'error somewhere';