package Template::Coverable::Document; use strict; use base qw/Template::Document/; use File::Temp qw( tempfile ); use File::Basename; sub write_perl_file { my ($class, $file, $content) = @_; my ($fh, $tmpfile); return $class->error("invalid filename: $file") unless $file =~ /^(.+)$/s; eval { my $pkg = Devel::Cover::TT::file2pkg($file); ($fh, $tmpfile) = tempfile( DIR => dirname($file) ); print $fh "package $pkg;\nsub getDocument {\n"; print $fh $class->as_perl($content) || die $!; print $fh "};\n1;\n"; close($fh); }; return $class->error($@) if $@; $file = Devel::Cover::TT::file2pm($file); return rename($tmpfile, $file) || $class->error($!); } 1;