use re use str fn -value [v]{ var p = (re:find '^(\d+)\((\w+)\)$' $v) if (and (has-key $p groups) (== (count $p[groups]) 3)) { put [ &number=$p[groups][1][text] &text=$p[groups][2][text] ] } } fn -values [v]{ var vv = [ (str:split ',' $v) ] if (== (count $vv) 1) { -value $vv[0] } else { put [ (each $-value~ $vv) ] } } fn -get-id []{ var id = [&] str:split ' ' (id) | each [e]{ var p = [ (str:split '=' $e) ] if (== (count $p) 2) { set id[$p[0]] = (-values $p[1]) } } put $id } fn -get [k]{ var id = (-get-id) if (has-key $id $k) { put $id[$k] } } fn -is-root []{ == (-get uid)[number] 0 } edit:add-var get-id~ $-get-id~ edit:add-var get-uid~ []{ -get uid } edit:add-var get-gid~ []{ -get gid } edit:add-var get-groups~ []{ -get groups; -get groupes } edit:add-var is-root~ $-is-root~