+my $out_html_cache_fh;
+sub out_html_cache($@)
+{
+ my ($event, @data) = @_;
+ if($event eq 'startmatrix')
+ {
+ # open out file
+ my ($addr, $type, $map, @columns) = @data;
+ if(!defined $addr)
+ {
+ $type ||= ':any';
+ $map ||= ':any';
+ mkdir "$type";
+ open $out_html_cache_fh, ">", "$type/$map"
+ or warn "open $type/$map: $!";
+ select $out_html_cache_fh;
+ }
+ }
+ out_html($event, @data)
+ if defined $out_html_cache_fh;
+ if($event eq 'endmatrix')
+ {
+ # close out file
+ select STDOUT;
+ close $out_html_cache_fh
+ if defined $out_html_cache_fh;
+ undef $out_html_cache_fh;
+ }
+}
+
+my $out =
+ $ENV{html_cache} ? \&out_html_cache :
+ $ENV{html} ? \&out_html :
+ \&out_text;