コンパクトで高速実行がウリの Lua 5.1 ですが、string オブジェクトに split と join がありません。誰かが実装しているに違いないと思って調べてみると、していますよ!!

個人的には、メンテナンスしやすく、以下のように実装することにした。
string オブジェクトを汚染してしまいますが、好みの問題でしょうけど個人的には問題なしです。ちなみに、table オブジェクトにメソッドを追加しても、テーブル自体にメソッドが追加されるわけではないのですね。

--[[* split string *]]--
-- return iterator
string.split_it = function(str, sep)
        if str == nil then return nil end
        assert(type(str) == "string", "str must be a string")
        assert(type(sep) == "string", "sep must be a string")
        return string.gmatch(str, "[^\\" .. sep .. "]+")
end
-- return table
string.split = function(str, sep)
        local ret = {}
        for seg in string.split_it(str, sep) do
                ret[#ret+1] = seg
        end
        return ret
end
--[[* join *]]--
table.join = function (tbl, sep)
        local ret
        for n, v in pairs(tbl) do
                local seg = tostring(v)
                if ret == nil then
                        ret = seg
                else
                        ret = ret .. sep .. seg
                end
        end
        return ret
end

-- @example --
str = "a,b,c"
for _,v in pairs(str:split(",")) do
	print(v)
end

str = "1,2,3"
for i in str:split_it(",") do
	print (i)
end

str = "q,w,e,r"
tbl = str:split(",")
print(table.join(tbl,","))
-- NG: print(tbl:join(":"))