The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package HTTP::MobileAgent::Request;
use strict;
use Scalar::Util ();

sub new {
    my($class, $stuff) = @_;
    if (!defined $stuff) {
        bless { env => \%ENV }, 'HTTP::MobileAgent::Request::Env';
    }
    elsif (ref $stuff eq 'HASH') {
        # PSGI hash - translate it to an HTTP::Headers object
        require HTTP::Headers;
        my $hdrs = HTTP::Headers->new(
            map {
                (my $field = $_) =~ s/^HTTPS?_//;
                ( $field => $stuff->{$_} );        }
            grep { /^(?:HTTP|CONTENT|COOKIE)/i } keys %$stuff
        );
        bless { r => $hdrs }, 'HTTP::MobileAgent::Request::HTTPHeaders';
    }
    elsif (UNIVERSAL::isa($stuff, 'Apache')) {
        bless { r => $stuff }, 'HTTP::MobileAgent::Request::Apache';
    }
    elsif (Scalar::Util::blessed($stuff) && $stuff->isa('HTTP::Headers')) {
        bless { r => $stuff }, 'HTTP::MobileAgent::Request::HTTPHeaders';
    }
    else {
        bless { env => { HTTP_USER_AGENT => $stuff } }, 'HTTP::MobileAgent::Request::Env';
    }
}

package HTTP::MobileAgent::Request::Env;

sub get {
    my($self, $header) = @_;
    $header =~ tr/-/_/;
    return $self->{env}->{"HTTP_" . uc($header)};
}

package HTTP::MobileAgent::Request::Apache;

sub get {
    my($self, $header) = @_;
    return $self->{r}->header_in($header);
}

package HTTP::MobileAgent::Request::HTTPHeaders;

sub get {
    my($self, $header) = @_;
    return $self->{r}->header($header);
}

1;