From 69e4ff7c28debe5cae5bd505d5df12bd12bdd11a Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Thu, 30 May 2013 04:26:53 -0500 Subject: LoadClass plugin --- lib/App/REPL/Plugin/LoadClass.pm | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 lib/App/REPL/Plugin/LoadClass.pm diff --git a/lib/App/REPL/Plugin/LoadClass.pm b/lib/App/REPL/Plugin/LoadClass.pm new file mode 100644 index 0000000..9a48b22 --- /dev/null +++ b/lib/App/REPL/Plugin/LoadClass.pm @@ -0,0 +1,28 @@ +package App::REPL::Plugin::LoadClass; +use strict; +use warnings; + +use base 'App::REPL::Plugin'; + +use Module::Runtime 'use_package_optimistically'; +use Try::Tiny; + +sub execute { + my $self = shift; + my ($next, @args) = @_; + + try { + $next->(@args); + } + catch { + if (/^Can't locate object method "[^"]*" via package "([^"]*)"/) { + use_package_optimistically($1); + $next->(@args); + } + else { + die $_; + } + } +} + +1; -- cgit v1.2.3-54-g00ecf