Rubyの勉強したいんですが、レベルが高すぎて理解不能
とりあえず、KENTさんのASKA BBSをできるだけそのまま移植してみます。
今日はdecodeのところを。。。
質問するレベルにも達してなくて途方に暮れてます。
公開すれば親切な人が教えてくれるかと期待してます。
おかしいところや直したらいいところ教えてください。
ぼちぼちやりますんで、よろしくお願いします。

#!/usr/local/bin/ruby

$maxData = 51200
$post_flag = 0

def decode
  buf = ""
  if ENV['REQUEST_METHOD'] == "POST"
    $post_flag = 1
      if ENV['CONTENT_LENGTH'].to_i > $maxData
        error("投稿量が大きすぎます")
      end
      buf = gets
#      read(STDIN, buf, ENV['CONTENT_LENGTH']) 元はこれ。。。上だけでOKなの??
  else
    $post_flag = 0
    buf = ENV['QUERY_STRING']
  end

  buf.split(/&/).each {|l|
    (key,val) = l.split(/=/)
    val = "" unless val

    key = key.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do
      [$1.delete('%')].pack('H*')
    end
    val = val.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do
      [$1.delete('%')].pack('H*')
    end.gsub(/&/, '&amp;').gsub(/"/, '&quot;').gsub(/>/, '&gt;').gsub(/</, '&lt;'
    ).gsub(/\r\n/,'<br>').gsub(/\r/,'<br>').gsub(/\n/,'<br>')

		# S-JISコード変換
#		&jcode::convert(\$val, "sjis", "", "z"); これって必要??

    if $in[key]
      $in[key] = $in[key] + "\0" + $in[key]
    else
      $in[key] = val
    end
  }
end

def error
end

$in = Hash.new
decode

print <<END_HTML
Content-Type: text/html

<HTML>
<HEAD><TITLE>BBS test</TITLE></HEAD>
<BODY>
<H1>BBS test</H1>
<form method="POST">
名前:<input name="name" size="20"><br>
本文:<textarea name="comment" cols="40" rows="4"></textarea>
<input type="submit" value="送信">
</form>
<hr>
<P>名前= #{$in['name']}</P>
<P>本文= #{$in['comment']}</P>
</BODY>
</HTML>
END_HTML