use Path::Class qw(file); my @files; find( \&wanted, $startdir ); sub wanted { my $file = file($File::Find::name); return unless -f $file->basename; push @files, $File::Find::name; } for (@files) { if (/\.zip/) { $zip->addFile($_)->desiredCompressionLevel(0); } else { $zip->addFile($_); } } $zip->writeToFileNamed('test.zip');