view Lib/IMPL/Code/Loader.pm @ 198:2ffe6f661605

Implemented IMPL::Web::Handler::RestController fixes in IMPL::Serialization completed IMPL::Web::Application::RestResource added IMPL::Web::Handler::JSONView added IMPL::Web::RestContract
author cin
date Fri, 20 Apr 2012 16:06:36 +0400
parents 4d0e1962161c
children a8db61d0ed33
line wrap: on
line source

package IMPL::Code::Loader;
use strict;
use warnings;

my %packages;

sub Provide {
    my ($self,$package) = @_;
    
    my ($declaringPackage,$file) = caller();
    $packages{$package} = { declaringPackage => $declaringPackage, file => $file, evidence => 'provide' };
}

sub Require {
    my ($self,$package) = @_;
    
    return 1 if $packages{$package};
    
    if (my $file = $INC{$package}) {
        $packages{$package} = { file => $file, evidence => 'inc' };
        return 1;
    } 
    
    undef $@;
    
    if ( eval "require $package; 1;" and not $packages{$package}) {
        $packages{$package} = { file => $INC{$package}, evidence => 'inc' };
    };
            
    die $@ if $@ and not $!;
}

1;