use Archive::Zip qw/:ERROR_CODES :CONSTANTS/; my $zip = Archive::Zip->new(); $zip->read('/tmp/foo.zip')==AZ_OK or die "read"; for my $member ($zip->members) { next if $member->isDirectory; my $fn = $member->fileName; $fn =~ s/foo/bar/; $member->fileName($fn); } $zip->overwrite==AZ_OK or die "write";