ok .. i understand what you're going after now and the problem ..
first, change
@values = split(/\|/,$case);
$driveltr = $values[0];
$dira = $values[1];
$dirb = $values[2];
$unique_id = $values[3];
$case_num = $values[4];
$case_part = $values[5];
to something like:
my ($driveltr, $dira, $dirb, $unique_id, $case_num, $case_part) = spli
+t(/\|/,$case);
again, PLEASE use strict;
Now, to approach your problem .. One way would be, in the for loop, to populate a hash w/keys of the zip_file_name's, and values of a list (or hash) of files to put in there. Then, loop over that hash and write out the zips. Here's (untested) code that uses this approach, has the above cleanup, plus additional refactoring (note the simplications/reductions):
use strict;
use warnings;
use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
my $file_path = "c:/temp/zip";
my @files = <c:/temp/zip/*.tif>;
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;
}
|