ASP4
view release on metacpan or search on metacpan
lib/ASP4/HandlerResolver.pm view on Meta::CPAN
return $HandlerCache{"$ENV{DOCUMENT_ROOT}:$uri"} = $page->package;
}
else
{
return;
}# end if()
}# end if()
}# end resolve_request_handler()
sub check_reload
{
my ($s, $uri) = @_;
if( $uri =~ m/^\/handlers\// )
{
(my $handler = $uri) =~ s/^\/handlers\///;
$handler =~ s/[^a-z0-9_]/::/gi;
(my $path = "$handler.pm") =~ s/::/\//g;
my $filepath = $s->context->config->web->handler_root . "/$path";
(my $inc_entry = "$handler.pm") =~ s/::/\//g;
return unless -f $filepath;
if( stat($filepath)->mtime > ($FileTimes{ "$ENV{DOCUMENT_ROOT}:$filepath" } || 0) )
{
$FileTimes{ "$ENV{DOCUMENT_ROOT}:$filepath" } = stat($filepath)->mtime;
$s->_forget_package(
$inc_entry, $handler
);
delete( $HandlerCache{"$ENV{DOCUMENT_ROOT}:$uri"} );
}# end if()
}
else
{
my $info = ASP4::PageLoader->discover( script_name => $uri );
return if $info->{is_static};
return unless -f $info->{saved_to};
$FileTimes{ "$ENV{DOCUMENT_ROOT}:$info->{filename}" } ||= 0;
if( stat($info->{filename})->mtime > $FileTimes{ "$ENV{DOCUMENT_ROOT}:$info->{filename}" } )
{
$FileTimes{ "$ENV{DOCUMENT_ROOT}:$info->{filename}" } = stat($info->{filename})->mtime;
$s->_forget_package(
$info->{compiled_as}, $info->{package}
);
delete( $HandlerCache{"$ENV{DOCUMENT_ROOT}:$uri"} );
}# end if()
}# end if()
}# end check_reload()
sub _forget_package
{
my ($s, $inc, $package) = @_;
# Forcibly forget all about the handler we are going to reload:
no strict 'refs';
delete( $INC{ $inc } );
if( *{"$package\::run"} )
{
no warnings;
*{"$package\::run"} = undef;
*{"$package\::before_run"} = undef;
*{"$package\::after_run"} = undef;
}# end if()
}# end _forget_package()
1;# return true:
( run in 1.020 second using v1.01-cache-2.11-cpan-d80b1682f3f )