16.5 Avoiding Dealing with Headers
There is another approach to dynamic content that is possible with mod_perl. This approach is appropriate if the content changes relatively infrequently, if we expect lots of requests to retrieve the same content before it changes again, and if it is much cheaper to test whether the content needs refreshing than it is to refresh it.
In this situation, a PerlFixupHandler can be installed for the relevant location. This handler must test whether the content is up to date or not, returning DECLINED so that the Apache core can serve the content from a file if it is up to date. If the content has expired, the handler should regenerate the content into the file, update the $r->finfo status and still return DECLINED, which will force Apache to serve the now updated file. Updating $r->finfo can be achieved by calling:
$r->filename($file); # force update of the finfo structure
even if this seems redundant because the filename is the same as $file. This is important because otherwise Apache would use the out-of-date finfo when generating the response header.