aboutsummaryrefslogtreecommitdiff
path: root/lib/File/Cache/Parsed.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/File/Cache/Parsed.pm')
-rw-r--r--lib/File/Cache/Parsed.pm18
1 files changed, 14 insertions, 4 deletions
diff --git a/lib/File/Cache/Parsed.pm b/lib/File/Cache/Parsed.pm
index c67b16b..34f5aed 100644
--- a/lib/File/Cache/Parsed.pm
+++ b/lib/File/Cache/Parsed.pm
@@ -105,12 +105,17 @@ sub stat {
sub put {
my ($self,$filename,$contents)=@_;
+ my $err;
my $ww=first {$filename =~ m{$_->[0]}} @{$self->{writers}};
if ($ww) {
- $self->{cache}{$filename}=$contents;
- return $ww->[1]->($filename,$contents);
+ my $ret=eval {$ww->[1]->($filename,$contents)};
+ unless ($@) {
+ $self->{cache}{$filename}=$contents;
+ return $ret;
+ }
+ $err=$@;
}
- elsif (!ref($contents)) {
+ if (!ref($contents)) {
my $pp=first {$filename =~ m{$_->[0]}} @{$self->{parsers}};
if ($pp) {
$self->{cache}{$filename}=$pp->[1]->($filename,$contents);
@@ -121,7 +126,12 @@ sub put {
return print {file($filename)->openw} $contents;
}
else {
- croak "'$contents' is not a scalar, and no writer defined for the name '$filename'";
+ if ($err) {
+ croak "'$contents' is not a scalar, and the writer for the name '$filename' died with: $err";
+ }
+ else {
+ croak "'$contents' is not a scalar, and no writer defined for the name '$filename'";
+ }
}
}