File::Findが便利

今更なんですがねー。

use strict;
use File::Find;

my ($target_directory) = @ARGV;

my $filter = sub{
  /\.(?:gif|jpe?g|png)/ or return;
  printf qq{<img src="%s/%s" alt="%s">\n},$File::Find::dir,$_,$_;
};
find($filter,$target_directory || '.');;

対象となるディレクトリ以下を再帰的に検索していきます。
引数を一つわたします。なければ、カレントディレクトリを使用します。

とりあえず、日本語ファイル名とか、スペースを含むディレクトリとかは無視の方向でw

必要なら、あとは適当にヘッダとフッタつけてHTMLにしたってください。めんどいので終了<オイ