in reply to Re^4: needing to zip files in a series that begin with the same IP address
in thread needing to zip files in a series that begin with the same IP address

Hi, diamondsandperls.

You're certainly not clueless, as you've mostly done this work yourself.

Sorry, but I didn't mean to confuse the issue by using __DATA__, but it was for example only (gives a source of the data for the script). So, you can use what you've already done like this:

use Modern::Perl; use IO::Compress::Zip qw(zip $ZipError) ; my %files; my @files = <*.txt *.docx>; for (@files) { next unless /^(\d+.\d+.\d+.\d+)/; push @{ $files{$1} }, $_; } for my $ip ( keys %files ) { do { print "Zip $ip -> $_" } for @{ $files{$ip} }; }

Place your zipping call within the do{} block (replacing the printing placeholder), noting that $ip contains the common IP address and $_ contains the complete file name to be zipped.

ps Modern::Perl contains both strict and warnings.

Replies are listed 'Best First'.
Re^6: needing to zip files in a series that begin with the same IP address
by diamondsandperls (Beadle) on Jul 27, 2012 at 22:32 UTC
    Thanks for your help. I am having trouble nailing that part just right i have tried several zip calls but the code is failing. Thanks for the heads up on Modern::Perl I was curious of what the module was doing.

    here is what seems to be the best educated guess

    #!perl use Modern::Perl; use IO::Compress::Zip qw(zip $ZipError) ; my %files; my @files = <*.txt *.docx>; for (@files) { next unless /^(\d+.\d+.\d+.\d+)/; push @{ $files{$1} }, $_; } for my $ip ( keys %files ) { my $output = "$ip.zip"; do { zip => $output, $ip -> $_ } for @{ $files{$ip} }; }

      Remember to check for any return errors when zipping. Also, you can pass an array reference to zip, so try the following:

      for my $ip ( keys %files ) { zip \@{ $files{$ip} } => "$ip.zip" or die "zip failed: $ZipError\n +"; }