#!perl use warnings; use strict; use Archive::Zip qw( :ERROR_CODES :CONSTANTS ); use File::Find; my $dir = 'c:/a-temp'; my @zips; find sub { -d and return; /\.zip$/ and push @zips, [$File::Find::dir, $_]; }, $dir; my $zip = Archive::Zip->new; for (@zips) { chdir $_->[0] or die "can't chdir to $_->[0]: $!"; $zip->read($_->[1]) == AZ_OK or die "can't read _->[1]"; $zip->extractTree == AZ_OK or die "can't extract $_->[1]"; }