-
Notifications
You must be signed in to change notification settings - Fork 31
/
perl.pm
45 lines (38 loc) · 1.02 KB
/
perl.pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package Catmandu::Fix::Namespace::perl;
use Catmandu::Sane;
our $VERSION = '1.09';
use Catmandu::Util qw(is_instance require_package);
use String::CamelCase qw(camelize);
use Moo;
use namespace::clean;
with 'Catmandu::Fix::Namespace';
sub load {
my ($self, $name, $args, $type) = @_;
my $ns = join('::', map {camelize($_)} split(/\./, $self->name));
$ns = join('::', $ns, $type) if $type;
my $pkg;
try {
$pkg = require_package($name, $ns);
}
catch_case [
'Catmandu::NoSuchPackage' => sub {
Catmandu::NoSuchFixPackage->throw(
message => "No such fix package: $name",
package_name => $_->package_name,
fix_name => $name,
);
},
];
try {
$pkg->new(@$args);
}
catch {
$_->throw if is_instance($_, 'Catmandu::Error');
Catmandu::BadFixArg->throw(
message => $_,
package_name => $pkg,
fix_name => $name,
);
};
}
1;