This solution is based on strange behavior of string.sub.
IMO, "string.sub(index_from, index_to)" will be more handy if "index_from = 0' would mean "the index after the last character" instead of "the index before the first character".
("index_to = 0" should mean "index before the first character", as it is currently implemented in Lua)
The unexpected result of "str:sub(0)" makes programming a bit harder, as this "feature" is actually a trap, and you are compelled to use additional "if" to make things right. But surprisingly, this weird logic can be beneficial in codegolf :-)