X-Git-Url: http://git.shiar.net/perl/plp/.git/blobdiff_plain/b5e0ee87251670be18b2f2fc128a4be0b25ebfb8..6c6d67b2fb0a2a211f3603edcb2d2f7609f51f4f:/lib/PLP/Tie/Headers.pm diff --git a/lib/PLP/Tie/Headers.pm b/lib/PLP/Tie/Headers.pm index df41fbe..f0db968 100644 --- a/lib/PLP/Tie/Headers.pm +++ b/lib/PLP/Tie/Headers.pm @@ -1,8 +1,11 @@ package PLP::Tie::Headers; use strict; +use warnings; use Carp; +our $VERSION = '1.01'; + =head1 PLP::Tie::Headers Makes a hash case insensitive, and sets some headers. <_> equals <->, so C<$foo{CONTENT_TYPE}> is @@ -23,14 +26,21 @@ sub TIEHASH { { 'content-type' => 'Content-Type', 'x-plp-version' => 'X-PLP-Version', - } + }, + 1 # = content-type untouched ], $_[0]; } sub FETCH { my ($self, $key) = @_; + if ($self->[2] and defined $self->[0]->{'Content-Type'}) { + my $utf8 = eval { grep {$_ eq "utf8"} PerlIO::get_layers(*STDOUT) }; + $self->[0]->{'Content-Type'} .= '; charset=utf-8' if $utf8; + $self->[2] = 0; + } $key =~ tr/_/-/; - return $self->[0]->{ $self->[1]->{lc $key} }; + defined ($key = $self->[1]->{lc $key}) or return; + return $self->[0]->{$key}; } sub STORE { @@ -47,14 +57,15 @@ sub STORE { } else { $self->[1]->{lc $key} = $key; } + $self->[2] = 0 if $key eq 'Content-Type'; return ($self->[0]->{$key} = $value); } sub DELETE { my ($self, $key) = @_; $key =~ tr/_/-/; - delete $self->[0]->{$key}; - return delete $self->[1]->{lc $key}; + defined ($key = delete $self->[1]->{lc $key}) or return; + return delete $self->[0]->{$key}; } sub CLEAR {