Compress::Zlib's crc32 function can update a CRC in pieces; you can call it with an existing CRC to update it. So you read a buffer full at a time and update your CRC:
use Compress::Zlib
my $crc = 0;
while ($fh->read($buffer))
{
$crc = Compress::Zlib::crc32($buffer, $crc);
}