in reply to mod_perl Apache::Request vs Apache->request

Well, mod_perl doesn't work that way. Everything in mod_perl gets structured in accordance to the Apache lifecycle, and that handlers are tied to the directory, file or location sections in your httpd.conf. So you can't just feed to another module and expect it to automagically figure out what to do woth it.

You almost certainly want to use inheritance instead.

package My::Upload; sub Upload { my ($class, $apr) = @_; $class->Add($_) foreach $apr->upload; } sub Add { my ($class, $apr) = @_; ... } package My::Doohickey; use base qw/My::Upload/; sub handler ($$) { my ($class, $r) = @_; my $apr = Apache::Request->instance($r, POST_MAX => 10*1024*1024, DISABLE_UPLOADS => 0); $class->Upload($apr) if $apr->upload; ... return OK; }

Notes:

1. Using Apache::Request->instance() reuses a previously created Apache::Request object if you've created one for the current request. Only problem is that it ignores the parameters after $r after the first invocation.

2. If you start out with something like:

sub handler ($$) { my ($class, $r) = @_; my $apr = Apache::Request->instance($r, POST_MAX => 10*1024*1024, DISABLE_UPLOADS => 0); ...

That will put the module name in $class, the Apache object in $r, and an Apache::Request object in $apr.

3. If the browser is on a dialup line, that server process will wait damn near forever for the uploaded file. This would be a cheap DoS attack on your server: just do 10 MB uploads to your server until your server starts thrashing. I generally limit uploads to the smallest I can get away with, and use a proxy Apache with a smaller footprint front end to buffer the requests.

HTH

update:As I think about it, something like My::Mod::Add->handler($r) might work. But very likely it won't ... I've never tried it and I have more interesting experiments to perform.