From: Makoto Kuwata Date: 2007-11-26T00:09:10+09:00 Subject: [ruby-list:44276] [Q] cgi.rbについての質問 桑田といいます。 cgi.rbについて質問です。 (1) cgi.rb のテストスクリプトはありますか。 1.8.6のソースには見当たりませんでした。 (2) CGI::HtmlExtensionを別ファイルに分離する計画はありますか。 CGIアプリだとcgi.rbの読み込みに結構時間がかかるのですが、 HtmlExtensionを消すと読み込み時間が半分くらいになりました。 (3) 2268行目の CGI::initialize() で extend QueryExtension を 実行していますが、あらかじめ include しておくのではなく、 毎回 extend するのはなぜでしょうか。 ざっと見た限りだと、include でも問題ないように見えました。 (4) CGI::parse() は以下のように定義されてますが(895行目)、 def CGI::parse(query) params = Hash.new([].freeze) query.split(/[&;]/n).each do |pairs| key, value = pairs.split('=',2).collect{|v| CGI::unescape(v) } if params.has_key?(key) params[key].push(value) else params[key] = [value] end end params end これを次のように書き換えたとしても大丈夫でしょうか。 問題は、freezeした配列を使い回していいのかという点です。 FROZEN_ARRAY = [].freeze def CGI::parse(query) params = {} query.split(/[&;]/n).each do |pairs| key, value = pairs.split('=',2) (params[CGI::unescape(key)] ||= []) << CGI::unescape(value) end params.default = FROZEN_ARRAY params end 以上です。よろしくお願いします。 -- makoto kuwata