This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected.
This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing.
Module:Separated entries is inspired by Module:Br separated entries and serves as a templating front-end to mw.text.listToText. It takes any number of positional parameters and pieces them together with |separator=. |conjunction= can be optionally defined if a different separator is desired between the last and second last items. Leading and trailing whitespace is stripped; if the |separator= should contain spaces, use the HTML escape code  . Separated entries does not raise any errors by design.
{{#invoke:Separated entries|main|separator=...}}
-- This module takes positional parameters as input and concatenates them with-- an optional separator. The final separator (the "conjunction") can be-- specified independently, enabling natural-language lists like-- "foo, bar, baz and qux". The starting parameter can also be specified.localcompressSparseArray=require('Module:TableTools').compressSparseArraylocalp={}functionp._main(args)localseparator=args.separator-- Decode (convert to Unicode) HTML escape sequences, such as " " for space.andmw.text.decode(args.separator)or''localconjunction=args.conjunctionandmw.text.decode(args.conjunction)orseparator-- Discard values before the starting parameter.localstart=tonumber(args.start)ifstartthenfori=1,start-1doargs[i]=nilendend-- Discard named parameters.localvalues=compressSparseArray(args)returnmw.text.listToText(values,separator,conjunction)endlocalfunctionmakeInvokeFunction(separator,conjunction,first)returnfunction(frame)localargs=require('Module:Arguments').getArgs(frame)args.separator=separatororargs.separatorargs.conjunction=conjunctionorargs.conjunctionargs.first=firstorargs.firstreturnp._main(args)endendp.main=makeInvokeFunction()p.br=makeInvokeFunction('<br />')p.comma=makeInvokeFunction(mw.message.new('comma-separator'):plain())returnp