diff options
author | dakkar <dakkar@luxion> | 2008-12-29 11:41:31 +0000 |
---|---|---|
committer | dakkar <dakkar@luxion> | 2008-12-29 11:41:31 +0000 |
commit | f000aa6898806ef97e9e555625428197fabc2c58 (patch) | |
tree | 78b9003d2b0b7d523c3bd40f49188ebeb55d8201 /lib/File/Cache | |
parent | forse i feed funzionano… non testato (diff) | |
download | WebCoso-f000aa6898806ef97e9e555625428197fabc2c58.tar.gz WebCoso-f000aa6898806ef97e9e555625428197fabc2c58.tar.bz2 WebCoso-f000aa6898806ef97e9e555625428197fabc2c58.zip |
fallback for die-ing writers: use the parser
git-svn-id: svn://luxion/repos/WebCoso/trunk@395 fcb26f47-9200-0410-b104-b98ab5b095f3
Diffstat (limited to 'lib/File/Cache')
-rw-r--r-- | lib/File/Cache/Parsed.pm | 18 |
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'"; + } } } |