package optionally; # don't use this # # this was an experiment in loading modules optionally, so you can write: # # use optionally; # optionally use Module::Foo 1.23 qw/ function1 function2 /; # use strict; use warnings; use Keyword::Simple (); use Carp qw/ croak /; use Module::Runtime qw/ require_module /; use Class::Unload (); sub import { my $importing_package = caller; Keyword::Simple::define('optionally' => sub { my $line = shift; my ($matched, $action, $module, $rest) = ( $$line =~ m!\A(\s*(\S+)\s+(\S+)\s*(.*?);)! ) or croak "syntax error near 'optionally'"; substr($$line, 0, length($matched)) = ""; eval "package $importing_package; $matched"; }); } 1;