Actually I think
Text::CSV and the others only work with single character separators.
From Text::CSV:
sep_char
The char used for separating fields, by default a comma. (,). Limited to a single-byte character, usually in the range from 0x20 (space) to 0x7e (tilde).
The separation character can not be equal to the quote character. The separation character can not be equal to the escape character.
If you spot any bugs in my solutions, it's because I've deliberately left them in as an exercise for the reader! :-)