@values = split(/\|/,$case); $driveltr = $values[0]; $dira = $values[1]; $dirb = $values[2]; $unique_id = $values[3]; $case_num = $values[4]; $case_part = $values[5]; #### my ($driveltr, $dira, $dirb, $unique_id, $case_num, $case_part) = split(/\|/,$case); #### use strict; use warnings; use Archive::Zip qw( :ERROR_CODES :CONSTANTS ); my $file_path = "c:/temp/zip"; my @files = ; my $fileCount = scalar @files; print "We have $fileCount files to work with .. lets begin\n"; my %zips; my @items = map { chomp; s#(/|-|.tif)#|#g; lc } @files; # could just do this in the foreach parens .. foreach my $case (@items) { my ($driveltr, $dira, $dirb, $unique_id, $case_num, $case_part) = split(/\|/,$case); my $zip_file_name = "$file_path/$case_num.zip"; my $casePartStr = length($case_part) ? "-$case_part" : ""; my $file_name = "$unique_id-$case_num$casePartStr.tif"; my $file_to_zip = "$file_path/$unique_id-$case_num$casePartStr.tif"; print "to the '$zip_file_name' zip file I will add '$file_name'\n"; $zips{ $zip_file_name }->{ $file_to_zip } = $file_name; } while( my ($zip_file_name, $contents) = each %zips ){ my $zip = Archive::Zip->new(); while( my ($file_to_zip, $file_name) = each %$contents ){ zip->addFile( $file_to_zip, $file_name ); } die 'write error' unless $zip->writeToFileNamed( $zip_file_name ) == AZ_OK; }