use Modern::Perl; use IO::Compress::Zip qw(zip $ZipError); my %files; for (<*.txt *.docx>) { next unless /^(\d+.\d+.\d+.\d+)/; chomp; push @{ $files{$1} }, $_; } for my $ip ( keys %files ) { say 'Adding ' . @{ $files{$ip} } . " file(s) to archive $ip.zip"; zip \@{ $files{$ip} } => "$ip.zip" or die "zip failed: $ZipError\n"; } say 'Done!';