Commit | Line | Data |
542d5b5c |
1 | package Object::Remote::ModuleSender; |
2 | |
3 | use Config; |
4 | use File::Spec; |
5 | use List::Util qw(first); |
6 | use Moo; |
7 | |
8 | has dir_list => (is => 'lazy'); |
9 | |
10 | sub _build_dir_list { |
11 | my %core = map +($_ => 1), @Config{qw(privlibexp archlibexp)}; |
12 | [ grep !/$Config{archname}$/, grep !$core{$_}, @INC ]; |
13 | } |
14 | |
15 | sub source_for { |
16 | my ($self, $module) = @_; |
17 | my ($found) = first { -f $_ } |
18 | map File::Spec->catfile($_, $module), |
19 | @{$self->dir_list}; |
20 | die "Couldn't find ${module} in remote \@INC. dir_list contains:\n" |
21 | .join("\n", @{$self->dir_list}) |
22 | unless $found; |
23 | open my $fh, '<', $found or die "Couldn't open ${found} for ${module}: $!"; |
24 | return do { local $/; <$fh> }; |
25 | } |
26 | |
27 | 1; |