Class-Refresh
view release on metacpan or search on metacpan
lib/Class/Refresh.pm view on Meta::CPAN
package Class::Refresh;
BEGIN {
$Class::Refresh::AUTHORITY = 'cpan:DOY';
}
{
$Class::Refresh::VERSION = '0.07';
}
use strict;
use warnings;
# ABSTRACT: refresh your classes during runtime
use Carp 'carp';
use Class::Unload;
use Class::Load;
use Try::Tiny;
our %CACHE;
sub import {
my $package = shift;
my %opts = @_;
if ($opts{track_require}) {
require Devel::OverrideGlobalRequire;
require B;
Devel::OverrideGlobalRequire::override_global_require(sub {
my $next = shift;
my ($file) = @_;
my $ret = $next->();
$package->_update_cache_for($file)
# require v5.8.1;
unless ref(\$file) eq 'VSTRING'
# require 5.008001;
|| !(B::svref_2object(\$file)->FLAGS & B::SVf_POK());
return $ret;
});
}
}
sub refresh {
my $class = shift;
$class->refresh_module($_) for $class->modified_modules;
}
sub modified_modules {
my $class = shift;
my @ret;
for my $file (keys %CACHE) {
# refresh files that are in our
# %CACHE but not in %INC
push @ret, $class->_file_to_mod($file)
if (!$INC{$file});
}
for my $file (keys %INC) {
if (exists $CACHE{$file}) {
push @ret, $class->_file_to_mod($file)
if $class->_mtime($file) ne $CACHE{$file};
}
else {
$class->_update_cache_for($file);
}
}
return @ret;
}
( run in 1.100 second using v1.01-cache-2.11-cpan-39bf76dae61 )