package Reply::Plugin::AutoRefresh; use strict; use warnings; # ABSTRACT: automatically refreshes the external code you use use base 'Reply::Plugin'; use Class::Refresh 0.05 (); =head1 SYNOPSIS ; .replyrc [AutoRefresh] track_require = 1 =head1 DESCRIPTION This plugin automatically refreshes all loaded modules before every statement execution. It's useful if you are working on a module in a file and you want the changes to automatically be loaded in Reply. It takes a single argument, C, which defaults to true. If this option is set, the C functionality from L will be enabled. Note that to use the C functionality, this module must be loaded as early as possible (preferably first), so that other modules correctly see the global override. =cut sub new { my $class = shift; my %opts = @_; $opts{track_require} = 1 unless defined $opts{track_require}; Class::Refresh->import(track_require => $opts{track_require}); # so that when we load things after this plugin, they get a copy of # Module::Runtime which has the call to require() rebound to our overridden # copy. if this plugin is loaded first, these should be the only # modules loaded so far which load arbitrary user-specified modules. Class::Refresh->refresh_module('Module::Runtime'); Class::Refresh->refresh_module('base'); return $class->SUPER::new(@_); } sub compile { my $self = shift; my ($next, @args) = @_; Class::Refresh->refresh; $next->(@args); } 1;