user> (defn foo [] (println "foo")) #'user/foo user> foo #<user$foo user$foo@a0dc71> user> (munge foo) "user_DOLLARSIGN_foo_CIRCA_a0dc71"
(doseq [c (remove #(Character/isLetterOrDigit ^char %) (map char (range 32 127)))] (println c "->" (munge c))) ;; Prints: -> ! -> _BANG_ " -> _DOUBLEQUOTE_ # -> _SHARP_ $ -> $ % -> _PERCENT_ & -> _AMPERSAND_ ' -> _SINGLEQUOTE_ ( -> ( ) -> ) * -> _STAR_ + -> _PLUS_ , -> , - -> _ . -> . / -> _SLASH_ : -> _COLON_ ; -> ; < -> _LT_ = -> _EQ_ > -> _GT_ ? -> _QMARK_ @ -> _CIRCA_ [ -> _LBRACK_ \ -> _BSLASH_ ] -> _RBRACK_ ^ -> _CARET_ _ -> _ ` -> ` { -> _LBRACE_ | -> _BAR_ } -> _RBRACE_ ~ -> _TILDE_
munge