Я проверил это с предупреждениями и ограничениями и обнаружил определенные проблемы.
$zip
не использует my
(не знаю, намеренно ли это, ноuse strict
действительно помогает с такими глобалами, как этот). - Вы работаете
$zip->addFile($fil3,'file3.csv')
.$fil3
переменная определенно не существует.Во всяком случае, эта переменная $file3
. - Я предполагаю, что это проблема во время копирования и вставки, но подпрограмма не имеет соответствующей фигурной скобки.
Я сделал быстрый скрипт, которыйЯ использовал во время тестирования.
use strict;
use warnings;
use Archive::Zip qw( :ERROR_CODES );
use File::Spec;
sub zip_util {
my ($directory) = @_;
my $zip = Archive::Zip->new();
$zip->setChunkSize(65536);
# Add a file from disk
my $file1 = File::Spec->catfile( $directory, 'file.csv' );
my $file2 = File::Spec->catfile( $directory, 'file2.csv' );
my $file3 = File::Spec->catfile( $directory, 'file3.csv' );
$zip->addFile( $file1, 'file1.csv' )->desiredCompressionLevel(6);
$zip->addFile( $file2, 'file2.csv' )->desiredCompressionLevel(6);
$zip->addFile( $file3, 'file3.csv' )->desiredCompressionLevel(6);
# Save the Zip file
my $zipped_file = File::Spec->catfile( $directory, 'files.zip' );
if ( $zip->writeToFileNamed($zipped_file) != AZ_OK ) {
print STDERR "Zip Creation error\n";
}
}
zip_util '.';
Проблема в том, что он работал.Итак, я сделал этот скрипт для создания файлов размером 5 МБ:
use strict;
use warnings;
use 5.010;
for ( 1 .. 524_288 ) {
my $number = $_ % 10;
say "$number-------";
}
Оба файла в ZIP и оригинальном "CSV" имели одинаковый размер и содержание.Итак, это, вероятно, вторая проблема, о которой я упомянул - использование переменной $fil3
или чего-то еще с вашими файлами (которые, к сожалению, вы не загрузили, поэтому я не могу их изучить).