From: sinara@... Date: 1997-02-18T17:20:02+09:00 Subject: [ruby-list:2164] b64encode.rb 原です。 [ruby-list:1015] でわたなべさんの紹介してくれた、 decode64 の逆、encode64 です。 ------------------------------^ b64encode.rb #!/usr/local/bin/ruby def encode64(bin) encode = [] pad = 0 [bin].pack("u").each do |uu| len = (2 + (uu[0] - 32)* 4) / 3 encode << uu[1, len].tr('` -_', 'AA-Za-z0-9+/') pad += uu.length - 2 - len end encode.join("") + "=" * (pad % 3) end def b64encode(bin, len = 60) encode64(bin).scan(/.{1,#{len}}/o) do print $&, "\n" end end b64encode(gets(nil)) ------------------------------$ b64encode.rb それから、前から気づいていたのですが、大きなファイルに 対して encode = [] encode << uu[0, len].tr('` -_', 'AA-Za-z0-9+/') としているところを encode = "" encode += uu[0, len].tr('` -_', 'AA-Za-z0-9+/') とすると、メモリを使いきってスラッシングを始めてしまいます。 perl ではそんなことがないのですが、ruby は String#+= の やり過ぎに弱いのではないでしょうか?