From f000aa6898806ef97e9e555625428197fabc2c58 Mon Sep 17 00:00:00 2001 From: dakkar Date: Mon, 29 Dec 2008 11:41:31 +0000 Subject: fallback for die-ing writers: use the parser git-svn-id: svn://luxion/repos/WebCoso/trunk@395 fcb26f47-9200-0410-b104-b98ab5b095f3 --- lib/File/Cache/Parsed.pm | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'lib/File') 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'"; + } } } -- cgit v1.2.3