Apache-Handlers
view release on metacpan or search on metacpan
lib/Apache/Handlers.pm view on Meta::CPAN
my %sigil = qw:
CODE &
ARRAY @
SCALAR $
HASH %
:;
sub _do_handler {
my($method, $referent, $data) = @_;
my($rsig, $dsig);
foreach my $s (keys %sigil) {
$rsig = $sigil{$s} if(UNIVERSAL::isa($referent, $s));
$dsig = $sigil{$s} if(UNIVERSAL::isa($data, $s));
}
croak "Unknown referent type" if !defined $rsig;
if(UNIVERSAL::isa($referent, 'CODE')) {
$method->($referent);
} elsif(!defined $data) {
$method->(eval "sub { undef $rsig\$referent; }");
} elsif(!defined $dsig and $rsig eq q+$+) {
$method->(sub { $$referent = $data; });
} else {
croak "Potential referent and data mismatch" if !defined $dsig;
if($dsig eq '&') {
$method -> (eval "sub { $rsig\$referent = &\$data(\$referent); }");
} else {
$method -> (eval "sub { $rsig\$referent = $dsig\$data; }");
}
}
}
foreach my $p (keys %phases) {
my($code, $keeper, $pusher);
if($p eq 'ACCESS' || $p eq 'AUTHEN' || $p eq 'AUTHZ') {
$pusher = "\$r -> push_handlers('$phases{$p}', sub { &\$c; return DECLINED; })";
} else {
( run in 1.384 second using v1.01-cache-2.11-cpan-71847e10f99 )