my @filelist = ('zip1.zip','zip2.zip','zip3.zip'); #### zip1.zip -->file1.txt -->file2.txt zip2.zip -->directory1 (dir) ---->file1.txt ---->file3.txt -->file4.txt zip3.zp -->file5.txt -->file6.txt -->file7.txt #### bigzip.zip -->zip1 (dir) ---->file1.txt ---->file2.txt -->zip2 (dir) ---->directory1 (dir) ------>file1.txt ------>file3.txt ---->file4.txt -->zip3 (dir) ---->file5.txt ---->file6.txt ---->file7.txt #### my $zip = Archive::Zip->new(); foreach (@filelist) { my $file = Archive::Zip->new($_}); foreach ($file->members()){ $zip->addMember( $_ ); } } #### bigzip.zip -->file1.txt -->file2.txt -->directory1 (dir) ---->file1.txt ---->file3.txt -->file4.txt -->file5.txt -->file6.txt -->file7.txt #### my $x=1; my $zip = Archive::Zip->new(); foreach (@filelist) { my $file = Archive::Zip->new($_); my $directoryname = 'zip'.$x; foreach ($file->members()){ my $m = $zip->addMember( $_ ); $m->fileName($directoryname.'/'.$m->fileName()); } $x++; }