def cmd_split(s)
rx = /(?<command>[^<>\s]+)(<(?<args>(\d+)+(?:,\s*\d+)*)>)?/
res = []
s.scan(rx) {
res << ($~[:args] != nil ?
Hash["command", $~[:command], "args", $~[:args].split(/,\s*/)] :
Hash[$~[:command], ""]) }
return res
end
puts cmd_split("print<1, 2, 3>")
puts cmd_split("disp<1>")
puts cmd_split("+")
ZGVmIGNtZF9zcGxpdChzKQoJcnggPSAvKD88Y29tbWFuZD5bXjw+XHNdKykoPCg/PGFyZ3M+KFxkKykrKD86LFxzKlxkKykqKT4pPy8KCXJlcyA9IFtdCglzLnNjYW4ocngpIHsgCgkJcmVzIDw8ICgkfls6YXJnc10gIT0gbmlsID8gCgkJCUhhc2hbImNvbW1hbmQiLCAkfls6Y29tbWFuZF0sICJhcmdzIiwgJH5bOmFyZ3NdLnNwbGl0KC8sXHMqLyldIDogCgkJCUhhc2hbJH5bOmNvbW1hbmRdLCAiIl0pIH0KCXJldHVybiByZXMKZW5kCgpwdXRzIGNtZF9zcGxpdCgicHJpbnQ8MSwgMiwgMz4iKQpwdXRzIGNtZF9zcGxpdCgiZGlzcDwxPiIpCnB1dHMgY21kX3NwbGl0KCIrIikK