Чтобы получить уже декодированные параметры, нам нужно переопределить поведение базового класса Apache2::Request
из libapreq2 , тем самым потеряв преимущество в скорости XS. Но это даже не просто возможно, поскольку, к сожалению, мы саботируем конструктор CGI::Apache2::Wrapper
:
unless (defined $r and ref($r) and ref($r) eq 'Apache2::RequestRec') {
Это неправильное ОО-программирование, оно должно сказать
… $r->isa('Apache2::RequestRec')
или, возможно, вообще отказаться от имен классов и просто проверить поведение (… $r->can('param')
).
Я говорю, с этими препятствиями оно того не стоит. Я рекомендую сохранить существующее решение, которое явно декодирует параметры. Это достаточно ясно.
Чтобы перебрать параметры запроса, просто не передавайте аргумент методу param
, и вы получите список имен. Это задокументировано ( 1 , 2 ), пожалуйста, прочитайте более внимательно.