And this is why I've collapsed the char-level suffix tree to the substring-level:
I've always done that too, for exactly the reason you mentioned. I just don't create a tree from the collapsed sequences. I just keep the currently relevant collapsed sequence in a scalar (was called $flux, now called $unsplit).
I contemplated returning each item as an alternating list of required and optional components (as follows), but I wanted to keep the code a short as possible.
(
...
[ 'Le', 'noc', '3', '_', 'd', 'uallayer_', '3' ],
[ 'Le', 'noc', '5', '_', 'c', 'arina_', '1' ],
...
)
Update: Added last para and accompanying illuatration.