delay_use
view release on metacpan or search on metacpan
delay_use.pm view on Meta::CPAN
######################################################################
# (c) makoto[at]cpan[dot]org and mixi perl community members
# sample:
# use delay_use;
# $delay_use::DEBUG = 1;#¼Â¹Ô»þ¤Ë¥¨¥é¡¼¤¬¤¢¤Ã¤¿¾ì¹çSTDERR¤Ëɽ¼¨
# $delay_use::ABORT = 1;#¼Â¹Ô»þ¤Ë¥¨¥é¡¼¤¬¤¢¤Ã¤¿¾ì¹ç¥×¥í¥°¥é¥à¤ò½ªÎ»(exit-1)¡£
#
# ex1)
# my $pkg = delay_use('CGI::Session') || delay_use( 'CGI' ) || die;
# my $q = $pkg->new;
# print $q->header;
#
# ex2)
# delay_use( 'CGI' ,qw/:standard/ ) or die($delay_use::ERROR);
package delay_use;
use strict;
use warnings;
use base qw(Exporter);
our $VERSION = '1.00';
our @EXPORT = qw(delay_use);
our $ERROR = undef;
our $DEBUG = 0;
our $ABORT = 0;
our %INC = ();
sub delay_use {
my $pkg = shift;
my $caller = (caller)[0] || 'main';
my $func = $INC{$pkg} ||= eval qq{
sub {
package $caller;
eval qq{require $pkg};
if(\$@){
\$delay_use::ERROR = \$@;
delete \$delay_use::INC{$pkg};
print STDERR \$delay_use::ERROR if \$delay_use::DEBUG;
exit(-1) if \$delay_use::ABORT;
return;
}
$pkg->import(\@_) if $pkg->can('import');
return "$pkg";
}
};
return $func->(@_);
}
1;
__END__
=Head1 NAME
delay_use - Modular loading is delayed.
=Head1 SYNOPSIS
use delay_use;#export delay_use
# When an error message is outputted to STDERR
$delay_use::DEBUG = 1;#default=0
# When ABORT at the time of an error.
$delay_use::ABORT = 1;#default=0
ex1)
my $pkg_name = delay_use('CGI::Session') || delay_use( 'CGI' ) || die;
my $query = $pkg_name->new;
print $query->header;
ex2)
delay_use( 'CGI' ,qw/:standard/ ) or die($delay_use::ERROR);
=head1 AUTHOR
A. U. Thor, E<lt>makoto@cpan.orgE<lt>
=head1 COPYRIGHT AND LICENSE
Copyright 2005 by makoto@fes-total.com
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut
( run in 2.270 seconds using v1.01-cache-2.11-cpan-cdf2f3d4e48 )