Кодируешь JSON'ом, обрезаешь... Подход конечно тупой, например, в том же Crystal почти все объекты-кодеры умеют делать запись в io-устройство, которому можно задать лимит размера. Но раз уж Perl так не умеет...
Можно ещё действительно на счётчиках сделать, пихая в кодируемый хеш объекты и подсчитывая количество текста счётчиками на уровне класса: перед кодированием сбросить счётчик, потом каждый объект в методе TO_JSON прибавляет свой объём добавленного текста. Если превысили - все последующие объекты вернуть пустую строку. В конце снова сбросить счётчик в 0.