fix bug that allowed forwarded logs to be output from the logger built via env vars
[scpubgit/Object-Remote.git] / lib / Object / Remote / FromData.pm
CommitLineData
7462160e 1package Object::Remote::FromData;
2
3use strictures 1;
4use Object::Remote;
9031635d 5use Object::Remote::Logging qw ( :log );
7462160e 6
7our %Modules;
8our %Not_Loaded_Yet;
9our %Seen;
10
11sub import {
12 my $target = caller;
9031635d 13 log_trace { "import has been invoked by '$target' on " . __PACKAGE__ };
7462160e 14 return if $Seen{$target};
9031635d 15 log_debug { "'$target' has not yet loaded " . __PACKAGE__ };
7462160e 16 $Seen{$target} = $Not_Loaded_Yet{$target} = 1;
17}
18
19sub flush_loaded {
9031635d 20 log_debug { "flushing the loaded classes" };
7462160e 21 foreach my $key (keys %Not_Loaded_Yet) {
9031635d 22 log_trace { "flushing '$key'" };
7462160e 23 my $data_fh = do { no strict 'refs'; *{"${key}::DATA"} };
24 my $data = do { local $/; <$data_fh> };
25 my %modules = reverse(
26 $data =~ m/(^package ([^;]+);\n.*?(?:(?=^package)|\Z))/msg
27 );
28 $_ .= "\n1;\n" for values %modules;
29 @Modules{keys %modules} = values %modules;
30 delete $Not_Loaded_Yet{$key};
31 }
9031635d 32 log_trace { "done flushing loaded classes" };
7462160e 33}
34
35sub find_module {
36 flush_loaded;
37 my ($module) = @_;
38 $module =~ s/\//::/g;
39 $module =~ s/\.pm$//;
40 return $Modules{$module};
41}
42
431;