stas 01/10/19 03:37:20 Modified: ModPerl-Registry/lib/ModPerl RegistryCooker.pm Log: - module cleanup, moving XXX/META's into the todo list Revision Changes Path 1.4 +35 -75 modperl-2.0/ModPerl-Registry/lib/ModPerl/RegistryCooker.pm Index: RegistryCooker.pm =================================================================== RCS file: /home/cvs/modperl-2.0/ModPerl-Registry/lib/ModPerl/RegistryCooker.pm,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- RegistryCooker.pm 2001/10/19 07:35:26 1.3 +++ RegistryCooker.pm 2001/10/19 10:37:20 1.4 @@ -16,9 +16,6 @@ our $VERSION = '1.99'; use Apache::compat (); -# META: Should not use Apache::compat, the following methods need to -# be implemented: -# $r->slurp_filename use Apache::Response; use Apache::Log; @@ -27,27 +24,10 @@ use ModPerl::Util (); use ModPerl::Global (); -######################################################################### -# issues -# -######################################################################### - -# META: who sets this? What's the default? unless (defined $ModPerl::Registry::MarkLine) { $ModPerl::Registry::MarkLine = 1; } -### Optimizations -# -# - $o->[CLASS] of the subclass is known at compile time, so should -# create the subs using $o->[CLASS] on the fly for each subclass -# which wants them - -### TODO -# -# - who handles END/BEGIN/,CHECK,INIT) blocks? -# - see META's accross the file - ######################################################################### # debug constants # @@ -58,9 +38,9 @@ use constant D_COMPILE => 4; use constant D_NOISE => 8; -# can override the debug level in httpd.conf with: +# the debug level can be overriden on the main server level of +# httpd.conf with: # PerlSetVar ModPerl::RegistryCooker::DEBUG 4 -# on the server level use Apache::ServerUtil (); use constant DEBUG => defined Apache->server->dir_config('ModPerl::RegistryCooker::DEBUG') @@ -96,26 +76,6 @@ ######################################################################### -# install the aliases into $class -# -######################################################################### - -sub install_aliases { - my ($class, $rh_aliases) = @_; - - no strict 'refs'; - while (my($k,$v) = each %$rh_aliases) { - if (my $sub = *{$v}{CODE}){ - #warn "$class: ok: $k => $v"; - *{ $class . "::$k" } = $sub; - } - else { - die "$class: $k aliasing failed; sub $v doesn't exist"; - } - } -} - -######################################################################### # func: new # dflt: new # args: $class - class to bless into @@ -128,7 +88,6 @@ my($class, $r) = @_; my $o = bless [], $class; $o->init($r); - #$o->debug("$$: init class: $class"); return $o; } @@ -160,7 +119,6 @@ # __PACKAGE__, which is tied to the file) ######################################################################### -# META: prototyping ($$) segfaults on request sub handler { my $class = (@_ >= 2) ? shift : __PACKAGE__; my $r = shift; @@ -219,7 +177,6 @@ $o->flush_namespace; - # META: handle! #$o->chdir_file("$Apache::Server::CWD/"); if ( ($rc = $o->error_check) != Apache::OK) { @@ -291,9 +248,6 @@ # make sure that the sub-package doesn't start with a digit $package = "_$package"; - # META: ??? explain - $ModPerl::Registry::curstash = $package; - # prepend root $package = $o->[CLASS] . "::Cache::$package"; @@ -331,12 +285,6 @@ substr($o->[URI], 0, length($o->[URI]) - length($path_info)) : $o->[URI]; - # META: do we handle this? - # if ($ModPerl::Registry::NameWithVirtualHost && $o->[REQ]->server->is_virtual) { - # my $name = $o->[REQ]->get_server_name; - # $script_name = join "", $name, $script_name if $name; - # } - $script_name =~ s:/+$:/__INDEX__:; return $script_name; @@ -365,10 +313,7 @@ # relative require/open will work. $o->chdir_file; -# META: what's this? -# # compile this subroutine into the uniq package name -# $o->debug("handler eval-ing") if DEBUG & D_NOISE; -# undef &{"$o->[PACKAGE]\::handler"};# unless $Debug && $Debug & 4; #avoid warnings +# undef &{"$o->[PACKAGE]\::handler"}; unless DEBUG & D_NOISE; #avoid warnings # $o->[PACKAGE]->can('undef_functions') && $o->[PACKAGE]->undef_functions; my $line = $o->get_mark_line; @@ -385,22 +330,18 @@ my %orig_inc = %INC; -#warn "[-- $eval --]"; my $rc = $o->compile(\$eval); $o->debug(qq{compiled package \"$o->[PACKAGE]\"}) if DEBUG & D_NOISE; - # META: handle! #$o->chdir_file("$Apache::Server::CWD/"); - # %INC cleanup - #in case .pl files do not declare package ...; + # %INC cleanup in case .pl files do not declare package ...; for (keys %INC) { next if $orig_inc{$_}; next if /\.pm$/; delete $INC{$_}; } -# META: $r->child_terminate is not implemented # if(my $opt = $r->dir_config("PerlRunOnce")) { # $r->child_terminate if lc($opt) eq "on"; # } @@ -516,9 +457,8 @@ for (keys %$tab) { my $fullname = join '::', $o->[PACKAGE], $_; - #code/hash/array/scalar might be imported - #make sure the gv does not point elsewhere - #before undefing each + # code/hash/array/scalar might be imported make sure the gv + # does not point elsewhere before undefing each if (%$fullname) { *{$fullname} = {}; undef %$fullname; @@ -528,7 +468,7 @@ undef @$fullname; } if ($$fullname) { - my $tmp; #argh, no such thing as an anonymous scalar + my $tmp; # argh, no such thing as an anonymous scalar *{$fullname} = \$tmp; undef $$fullname; } @@ -581,8 +521,8 @@ my %switches = ( 'T' => sub { - Apache::warn("T switch ignored, ". - "enable with 'PerlTaintCheck On'\n") + Apache::warn("T switch is ignored, ". + "enable with 'PerlSwitches -T' in httpd.conf\n") unless $Apache::__T; ""; }, 'w' => sub { "use warnings;\n" }, @@ -601,7 +541,6 @@ last if substr($s,0,1) eq "-"; for (split //, $s) { next unless exists $switches{$_}; - #print STDERR "parsed `$_' switch\n"; $prepend .= &{$switches{$_}}; } } @@ -633,8 +572,6 @@ sub chdir_file_normal { my($o, $dir) = @_; - # META: not implemented - # META: see todo/api.txt unsafe! # $o->[REQ]->chdir_file($dir ? $dir : $o->[FILENAME]); } @@ -708,12 +645,36 @@ if ($@ and substr($@,0,4) ne " at ") { $o->[REQ]->log_error("$$: $o->[CLASS]: `$@'"); $@{$o->[REQ]->uri} = $@; - $@ = ''; #XXX fix me, if we don't do this Apache::exit() breaks + #$@ = ''; #XXX fix me, if we don't do this Apache::exit() breaks return Apache::SERVER_ERROR; } return Apache::OK; } + +######################################################################### +# func: install_aliases +# dflt: install_aliases +# desc: install the method aliases into $class +# args: $class - the class to install the methods into +# $rh_aliases - a ref to a hash with aliases mapping +# rtrn: nothing +######################################################################### + +sub install_aliases { + my ($class, $rh_aliases) = @_; + + no strict 'refs'; + while (my($k,$v) = each %$rh_aliases) { + if (my $sub = *{$v}{CODE}){ + *{ $class . "::$k" } = $sub; + } + else { + die "$class: $k aliasing failed; sub $v doesn't exist"; + } + } +} + ### helper methods sub debug{ @@ -727,10 +688,9 @@ =head1 NAME -ModPerl::RegistryCooker - +ModPerl::RegistryCooker - A Base Class of all mod_perl Registry Modules =head1 SYNOPSIS - =head1 DESCRIPTION