[Vienna-pm] Was macht mod_perl da?

Peter J. Holzer hjp-vienna-pm-list at hjp.at
Sun Aug 20 10:21:51 PDT 2006


Ich spiele gerade ein bisschen mit Output-Filtern in mod_perl herum, und
dabei ist mir folgendes aufgefallen:

Normalerweise muss man in Perl nur die Module "use"n, deren
Package-Methoden man aufruft. Bekommt man von irgendwoher ein Objekt aus
einer anderen Klasse, kann man dessen Objekt-Methoden aufrufen, weil das
entsprechende Package von dem Package, das das Objekt erzeugt hat,
geladen wurde. Also z.B.:

| use MIME::Parser;
| my $parser = new MIME::Parser(output_to_core => 'ALL');
| my $entity = $parser->parse_data($rawmsg) or die "couldn't parse MIME stream";
| my $head = $entity->head();

Hier kann ich $entity->head() aufrufen, ohne vorher ein 
use MIME::Entity; gemacht zu haben. Dafür hat schon MIME::Parser
spätestestens in $parser->parse_data().

Nicht so bei mod_perl.


| package MyApache2::OutputFilter;
|   
| use strict;
| use warnings;
| 
| use base qw(Apache2::Filter);
| 
| use Apache2::Const -compile => qw(OK);
| 
| use constant BUFF_LEN => 1024;
| 
| sub handler : FilterRequestHandler {
|     my $f = shift;
|     my $c = 0;
| 
|     unless ($f->ctx) {
|         $f->r->headers_out->unset('Content-Length');
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|         $f->ctx({});
|     }

geht fürchterlich schief, mit den Fehlermeldungen 

Can't locate object method "unset" via package "APR::Table" (meistens)

oder

Can't locate object method "headers_out" via package
"Apache2::RequestRec" (manchmal) 

Fügt man 

| use Apache2::RequestRec ();
| use APR::Table ();

ein, so funktioniert es. Offensichtlich wird hier von den Klassen
Apache2::RequestRec und APR::Table genug geladen, um Objekte dieser
Klassen erzeugen zu können, aber etliche Methoden fehlen noch und werden
auch nicht über den Autoloader bei Bedarf erzeugt :-(.

	hp


-- 
   _  | Peter J. Holzer    | Schlagfertigkeit ist das, was einem
|_|_) | Sysadmin WSR       | auf dem Nachhauseweg einfällt.
| |   | hjp at hjp.at         |    -- Lars 'Cebewee' Noschinski in dasr.
__/   | http://www.hjp.at/ |
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://mail.pm.org/pipermail/vienna-pm/attachments/20060820/860d8ce1/attachment.bin 


More information about the Vienna-pm mailing list