delay_use - Modular loading is delayed.


delay_use documentation Contained in the delay_use distribution.

Index


Code Index:

delay_use - Modular loading is delayed.

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);

AUTHOR

Top

A. U. Thor, <makoto@cpan.org<

COPYRIGHT AND LICENSE

Top


delay_use documentation Contained in the delay_use distribution.

######################################################################
# (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__