Mercurial > pub > Impl
diff Lib/IMPL/require.pm @ 197:6b1dda998839
Added IMPL::declare, IMPL::require, to simplify module definitions
IMPL::Transform now admires object inheritance while searching for the transformation
Added HTTP some exceptions
IMPL::Web::Application::RestResource almost implemented
author | sergey |
---|---|
date | Thu, 19 Apr 2012 02:10:02 +0400 |
parents | |
children | 891c04080658 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/IMPL/require.pm Thu Apr 19 02:10:02 2012 +0400 @@ -0,0 +1,56 @@ +package IMPL::require; +use Scalar::Util qw(set_prototype); + +sub import { + my ($self, $aliases) = @_; + + return unless $aliases; + + die "A hash reference is required" unless ref $aliases eq 'HASH'; + + my $caller = $caller; + + no strict 'refs'; + + while( my ($alias, $class) = each %$aliases ) { + (my $file = $class) =~ s/::|'/\//g; + require "$file.pm"; + + *{"${caller}::$alias"} = set_prototype(sub { + $class + }, ''); + } +} + +1; + +__END__ + +=pod + +=head1 NAME + +C<IMPL::require> загружает и назначет псевдонимы модулям. + +=head1 SYNOPSIS + +=begin code + +use IMPL::require { + TFoo => 'My::Nested::Package::Foo', + FS => 'File::Spec' +}; + +my $obj = My::Nested::Package::Foo->new('foo'); +$obj = TFoo->new('foo'); # ditto + +FS->catdir('one','two','three'); + +=end code + +=head1 DESCRIPTION + +Загружает модули с помощью C<require> и создает константы которые возвращаю полное имя модуля. + + +=cut \ No newline at end of file