Mercurial > pub > Impl
comparison 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 |
comparison
equal
deleted
inserted
replaced
196:a705e848dcc7 | 197:6b1dda998839 |
---|---|
1 package IMPL::require; | |
2 use Scalar::Util qw(set_prototype); | |
3 | |
4 sub import { | |
5 my ($self, $aliases) = @_; | |
6 | |
7 return unless $aliases; | |
8 | |
9 die "A hash reference is required" unless ref $aliases eq 'HASH'; | |
10 | |
11 my $caller = $caller; | |
12 | |
13 no strict 'refs'; | |
14 | |
15 while( my ($alias, $class) = each %$aliases ) { | |
16 (my $file = $class) =~ s/::|'/\//g; | |
17 require "$file.pm"; | |
18 | |
19 *{"${caller}::$alias"} = set_prototype(sub { | |
20 $class | |
21 }, ''); | |
22 } | |
23 } | |
24 | |
25 1; | |
26 | |
27 __END__ | |
28 | |
29 =pod | |
30 | |
31 =head1 NAME | |
32 | |
33 C<IMPL::require> загружает и назначет псевдонимы модулям. | |
34 | |
35 =head1 SYNOPSIS | |
36 | |
37 =begin code | |
38 | |
39 use IMPL::require { | |
40 TFoo => 'My::Nested::Package::Foo', | |
41 FS => 'File::Spec' | |
42 }; | |
43 | |
44 my $obj = My::Nested::Package::Foo->new('foo'); | |
45 $obj = TFoo->new('foo'); # ditto | |
46 | |
47 FS->catdir('one','two','three'); | |
48 | |
49 =end code | |
50 | |
51 =head1 DESCRIPTION | |
52 | |
53 Загружает модули с помощью C<require> и создает константы которые возвращаю полное имя модуля. | |
54 | |
55 | |
56 =cut |