transform_exceptions
);
+do {
+ package System::Introspection::_Exception;
+ use Moo;
+ has message => (is => 'ro');
+};
+
+sub fail { die System::Introspection::_Exception->new(message => shift) }
+sub is_report_exception { ref(shift) eq 'System::Introspection::_Exception' }
+
sub files_from_dir {
my ($dir) = @_;
my $dh;
opendir $dh, $dir
- or die "Unable to read directory $dir: $!\n";
+ or fail "Unable to read directory $dir: $!";
my @files;
while (defined( my $item = readdir $dh )) {
next if -d "$dir/$item";
sub transform_exceptions (&) {
my ($code) = @_;
- local $@;
my $result = eval { $code->() };
- return { error => "$@" }
- if $@;
+ if (my $error = $@) {
+ return { error => $error->message }
+ if is_report_exception $error;
+ die $@;
+ }
return $result;
}
if wantarray;
$command = join ' ', @$command
if ref $command;
- die "Error running command ($command): $err\n"
+ fail "Error running command ($command): $err"
unless $ok;
return $out;
}
sub handle_from_command {
my ($command) = @_;
open my $pipe, '-|', $command
- or die "Unable to read from command '$command': $!\n";
+ or fail "Unable to read from command '$command': $!";
return $pipe;
}
sub handle_from_file {
my ($file) = @_;
open my $fh, '<', $file
- or die "Unable to read $file: $!\n";
+ or fail "Unable to read $file: $!";
return $fh;
}