Я думаю, что вы можете использовать метод содержимого для вашего объекта $ req, чтобы получить необработанный контент, возвращаемый в результате POST. Если контент огромен, то метод content_ref больше подходит и предлагает напрямую манипулировать контентом.
my $zfile = $req->content;
и взломать $ zfile с помощью Archive :: Zip, как предложил DVK.