APR::Table の使い方

use strict;
use APR::Pool ();
use APR::Table ();

my $p = APR::Pool->new;
my $t = APR::Table::make($p, 1);

$t->add('k1', 'v1-1');
$t->add('k1', 'v1-2');
$t->add('k2', 'v2-1');
$t->merge('k2', 'v2-2');

my @v1 = $t->get('k1');  # @v1 == ('v1-1', 'v1-2')
my @v2 = $t->get('k2');  # @v2 == ('v2-1, v2-2')

$t->do(
  sub {
    my ($k, $v) = @_;
    print "$k = $v\n";
    1;
  }
);

__END__

出力は
k1 = v1-1
k1 = v1-2
k2 = v2-1, v2-2

mod_perl 環境では pool は $r->pool() とかすれば取得できるのでそれを使ってください。make() の 1 は,作成するときに作っておくスロットの数で,set や add すると自動的に増えていくのでご心配なく。
キー一覧だけ取得するメソッドというのはなさそうです。ハッシュに tie するか,do() でクロージャを与えてイテレータで収集するかですね。列挙を続けたいならクロージャで 1 を返すことをお忘れなく。