サスペンドから復帰したら再接続ってのを Gauche で書く 2
サスペンドから復帰したら再接続ってのを Gauche で書くに関して、shiro さん、id:scinfaxiさんにコメントを頂いたのでリファクタリング。
- 連想リストは Quote で簡単に書ける
- 正規表現を filter-map に直接渡すことが出来る(object-applyのおかげ)
- process-output->string-list を使いましょう
こんな感じになりました。
#!/usr/bin/gosh (use gauche.process) (use srfi-1) (use util.list) (define my-essids '(("home-ssid" . "/home/taro/home.sh") ("office-ssid" . "/home/taro/offiec.sh") ("cafe-ssid" . "/home/taro/cafe.sh"))) ;; iwlist を実行し存在する ESSID をリストで返す (define (exist-essid-list) (map (cut <> 1) (filter-map #/ESSID:\"([^\"]+)\"/ (process-output->string-list "iwlist ath0 scan")))) (define (main args) (let* ((essids (map car my-essids)) (essid (find (lambda (o) (member o essids)) (exist-essid-list)))) (if essid (sys-system (assoc-ref my-essids essid)))) 0)
ところでまだ cut に慣れなくて (cut <> 1) にとまどい lambda に展開して理解できたよ。