From: "青山 和光" Date: 1997-12-04T10:53:37+09:00 Subject: [ruby-list:5522] Re^2: cgi-lib.rb まつもとさん、おはようございます。 >>[ruby-list:5505] Re: cgi-lib.rb >>From: matz@netlab.co.jp (Yukihiro Matsumoto) >> >>むむむ.Stringにshellwords,url_escape,url_unescapeを追加する >>んですか….前のインタフェースの方が好きだなあ.というのも >>url_escapeはStringの性質では必ずしもないような気もするので. >> >># GCI#escape, CGI#unescapeっていうモジュール関数を用意するっ >># てのでどうでしょう? 文字列以外を渡す事は無いだろうな、と思ったのですが、考えてみれば前回の を書いた時には配列を渡していました。やはりまずいですね。 >>もっともStringのような既存のクラスを自由に拡張できるようにし >>たのは他でもない私なんですが,これをどのように使うのかはまだ >>結論を出していません.みなさんはどう思います? 便利だと思いました。(だからこそ今回使ってみたのですが) ただ、いいかげ んに名前を決めてしまうと後々面倒な事になるのは間違い無いので、それが気 になりました。 まあ、しかし、いきなり既存のクラスを拡張する人もあまりいないでしょうし、 私はとりあえずはこのままでも良いような気がします。 >>[ruby-list:5508] Re: cgi-lib.rb >>From: matz@netlab.co.jp (Yukihiro Matsumoto) >> >> shellwords.rb: >> shellwords() -> Shellwords#shellwords(モジュール関数) >> >> cgi-lib.rb >> CGI#url_escape, CGI#url_unescape(モジュール関数) >> >>更にurl_escape,url_unescapeは文字列を引数にとるようにしてみ >>ました.テストしていませんから,ご参考まで. やはりこうするべきですね。後で配列も受け取れるようにしましょう。 read_from_cmdline をこの変更にあわせるとこんな感じでしょうか。 def read_from_cmdline words = shellwords(if not ARGV.empty? then ARGV.join(' ') else STDERR.print "(offline mode: enter name=value pairs o n standard input)\n" readlines.join(' ').gsub(/\n/, '') end.gsub(/\\=/, '%3D').gsub(/\\&/, '%26')) if words.find{|x| x =~ /=/} then words.join('&') else words.join('+') end end やはり Perl よりもはるかにすっきりと書けますね。しかし、この書き方だと コメントを書き添え難くなるという事も少し感じました。まあ、どうせ実行前 にコメントは捨てられるのですから、ちょっと長くなっても丁寧に書いてやれ ば良いだけなのですが。 青山 和光 Wakou Aoyama