::= NUMBER ('.') NUMBER ('.') NUMBER ('.') NUMBER action => joindot ::= NAMECH+ separator => DOT action => joindot ... sub joindot { shift, join '.', @_ }