Emacs Lisp で join みたいなのはないのかと思ってぐぐってたら 折り畳み表示 - (new Hatena).blog() をみつけて、 mapconcat というのを使えばいいことがわかった。
elispでjoin - subpop - subtech にも載っていた。二年前か・・・。
で、現在の環境変数を得るのも getenv というのが使えると知ったので、環境変数をセットしなおすコードを書き直してみたのだけど、うまくうごかない。
(setenv "PATH" (mapconcat 'identity '("/Users/k-kaneko/perl5/bin" "/opt/local/bin/" (getenv "PATH")) ":"))
たぶん、 mapconcat の第二引数に渡す sequence の要素はすべて文字列じゃないといけなくて、でも sequence そのものをクォートしちゃってるから (getenv "PATH") が展開されず、へんな値があるのでエラー、ということじゃないかと思うのだけど、あんまりいい回避策が思い浮かばない。先に一個リストを作っておかないとダメなんだろうか。
結局こんなふうにしてみたけど、これはこれで読みづらい。
(let ((seq (cons "/Users/k-kaneko/perl5/bin" (cons "/opt/local/bin/" (cons (getenv "PATH") nil))))) (setenv "PATH" (mapconcat 'identity seq ":")))