[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