There is another aproach: one i use from time to time.
Dont use perls borken utf-8 support.
Pass the Argument -C0 to perl at the head of your script , and perl will treat all strings as raw binary.
As long as you only break your strings on well defined boundaries, and dont attempt to naively count characters, it will work fine.
If you need to truncate a string at a certain arbitrary point, such as "100 bytes" or so, you will have to make sure it stops at a well defined UTF-8 endpoint.