簡易HTTPサーバ

とりあえず実体参照変換はいれたほうがいいんじゃないかとか。

--- httpd.pl.orig       2007-05-14 00:46:06.000000000 +0900
+++ httpd.pl    2007-05-14 00:53:34.000000000 +0900
@@ -24,6 +24,7 @@
 use Socket;
 use IO::Handle;
 use HTTP::Status;
+use CGI;

 use POE qw(
     Sugar::Args
@@ -215,8 +216,8 @@
     my $out;
     for (dir($dir)->children) {
         $out .= sprintf "<li><a href=\"/%s\">%s%s</a></li>",
-            $_->relative($root),
-            $_->relative($dir),
+            CGI::escapeHTML($_->relative($root)),
+            CGI::escapeHTML($_->relative($dir)),
             $_->is_dir ? '/' : '';
     }
     return <<EOF;

あと、非同期とか考えなきゃ RubyWEBrick とか使うと簡単でいいんじゃないかと思った。

#!/usr/bin/env ruby

require 'webrick'
require 'webrick/httpserver'

root = ARGV.shift || '.'
server = WEBrick::HTTPServer.new({ 
      :DocumentRoot => root,
      :Port => 3000,
      :DirectoryIndex => [],
   }
)
Signal.trap 'INT' do 
   server.shutdown
end

server.start