CGI-Simple
view release on metacpan or search on metacpan
lib/CGI/Simple.pm view on Meta::CPAN
sub auth_type { $ENV{'AUTH_TYPE'} }
sub content_length { $ENV{'CONTENT_LENGTH'} }
sub content_type { $ENV{'CONTENT_TYPE'} }
sub document_root { $ENV{'DOCUMENT_ROOT'} }
sub gateway_interface { $ENV{'GATEWAY_INTERFACE'} }
sub path_translated { $ENV{'PATH_TRANSLATED'} }
sub referer { $ENV{'HTTP_REFERER'} }
sub remote_addr { $ENV{'REMOTE_ADDR'} || '127.0.0.1' }
sub remote_host {
$ENV{'REMOTE_HOST'} || $ENV{'REMOTE_ADDR'} || 'localhost';
}
sub remote_ident { $ENV{'REMOTE_IDENT'} }
sub remote_user { $ENV{'REMOTE_USER'} }
sub request_method { $ENV{'REQUEST_METHOD'} }
sub script_name { $ENV{'SCRIPT_NAME'} || $0 || '' }
sub server_name { $ENV{'SERVER_NAME'} || 'localhost' }
sub server_port { $ENV{'SERVER_PORT'} || 80 }
sub server_protocol { $ENV{'SERVER_PROTOCOL'} || 'HTTP/1.0' }
sub server_software { $ENV{'SERVER_SOFTWARE'} || 'cmdline' }
sub user_name {
$ENV{'HTTP_FROM'} || $ENV{'REMOTE_IDENT'} || $ENV{'REMOTE_USER'};
}
sub user_agent {
my ( $self, $match ) = @_;
return $match
? $ENV{'HTTP_USER_AGENT'} =~ /\Q$match\E/i
: $ENV{'HTTP_USER_AGENT'};
}
sub virtual_host {
my $vh = $ENV{'HTTP_HOST'} || $ENV{'SERVER_NAME'};
$vh =~ s/:\d+$//; # get rid of port number
return $vh;
}
sub path_info {
my ( $self, $info ) = @_;
if ( defined $info ) {
$info = "/$info" if $info !~ m|^/|;
$self->{'.path_info'} = $info;
}
elsif ( !defined( $self->{'.path_info'} ) ) {
$self->{'.path_info'}
= defined( $ENV{'PATH_INFO'} ) ? $ENV{'PATH_INFO'} : '';
# hack to fix broken path info in IIS source CGI.pm
$self->{'.path_info'} =~ s/^\Q$ENV{'SCRIPT_NAME'}\E//
if defined( $ENV{'SERVER_SOFTWARE'} )
&& $ENV{'SERVER_SOFTWARE'} =~ /IIS/;
}
return $self->{'.path_info'};
}
sub accept {
my ( $self, $search ) = @_;
my %prefs;
for my $accept ( split ',', $ENV{'HTTP_ACCEPT'} ) {
( my $pref ) = $accept =~ m|q=([\d\.]+)|;
( my $type ) = $accept =~ m|(\S+/[^;]+)|;
next unless $type;
$prefs{$type} = $pref || 1;
}
return keys %prefs unless $search;
return $prefs{$search} if $prefs{$search};
# Didn't get it, so try pattern matching.
for my $pref ( keys %prefs ) {
next unless $pref =~ m/\*/; # not a pattern match
( my $pat = $pref ) =~ s/([^\w*])/\\$1/g; # escape meta characters
$pat =~ s/\*/.*/g; # turn it into a pattern
return $prefs{$pref} if $search =~ /$pat/;
}
}
sub Accept { my $self = shift; $self->accept( @_ ) }
sub http {
my ( $self, $parameter ) = @_;
if ( defined $parameter ) {
( $parameter = uc $parameter ) =~ tr/-/_/;
return $ENV{$parameter} if $parameter =~ m/^HTTP/;
return $ENV{"HTTP_$parameter"} if $parameter;
}
return grep { /^HTTP/ } keys %ENV;
}
sub https {
my ( $self, $parameter ) = @_;
return $ENV{'HTTPS'} unless $parameter;
( $parameter = uc $parameter ) =~ tr/-/_/;
return $ENV{$parameter} if $parameter =~ /^HTTPS/;
return $ENV{"HTTPS_$parameter"};
}
sub protocol {
local ( $^W ) = 0;
my $self = shift;
return 'https' if uc $ENV{'HTTPS'} eq 'ON';
return 'https' if $self->server_port == 443;
my ( $protocol, $version ) = split '/', $self->server_protocol;
return lc $protocol;
}
sub url {
my ( $self, @p ) = @_;
use CGI::Simple::Util 'rearrange';
my ( $relative, $absolute, $full, $path_info, $query, $base )
= rearrange(
[
'RELATIVE', 'ABSOLUTE', 'FULL',
[ 'PATH', 'PATH_INFO' ],
[ 'QUERY', 'QUERY_STRING' ], 'BASE'
],
@p
);
my $url;
$full++ if $base || !( $relative || $absolute );
my $path = $self->path_info;
my $script_name = $self->script_name;
if ( $full ) {
my $protocol = $self->protocol();
$url = "$protocol://";
my $vh = $self->http( 'host' );
if ( $vh ) {
$url .= $vh;
}
else {
$url .= server_name();
my $port = $self->server_port;
$url .= ":" . $port
unless ( lc( $protocol ) eq 'http' && $port == 80 )
( run in 1.566 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )