line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package CGI::Simple::Standard; |
2
|
|
|
|
|
|
|
|
3
|
3
|
|
|
3
|
|
231060
|
use strict; |
|
3
|
|
|
|
|
29
|
|
|
3
|
|
|
|
|
90
|
|
4
|
|
|
|
|
|
|
#use warnings; |
5
|
3
|
|
|
3
|
|
2469
|
use CGI::Simple; |
|
3
|
|
|
|
|
9
|
|
|
3
|
|
|
|
|
15
|
|
6
|
3
|
|
|
3
|
|
16
|
use Carp; |
|
3
|
|
|
|
|
6
|
|
|
3
|
|
|
|
|
180
|
|
7
|
3
|
|
|
|
|
1801
|
use vars qw( $VERSION $USE_CGI_PM_DEFAULTS $DISABLE_UPLOADS $POST_MAX |
8
|
|
|
|
|
|
|
$NO_UNDEF_PARAMS $USE_PARAM_SEMICOLONS $HEADERS_ONCE |
9
|
3
|
|
|
3
|
|
16
|
$NPH $DEBUG $NO_NULL $FATAL *in %EXPORT_TAGS $AUTOLOAD ); |
|
3
|
|
|
|
|
6
|
|
10
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
$VERSION = "1.27"; |
12
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
%EXPORT_TAGS = ( |
14
|
|
|
|
|
|
|
':html' => [qw(:misc)], |
15
|
|
|
|
|
|
|
':standard' => [qw(:core :access)], |
16
|
|
|
|
|
|
|
':cgi' => [qw(:core :access)], |
17
|
|
|
|
|
|
|
':all' => [ |
18
|
|
|
|
|
|
|
qw(:core :misc :cookie :header :push :debug :cgi-lib |
19
|
|
|
|
|
|
|
:access :internal) |
20
|
|
|
|
|
|
|
], |
21
|
|
|
|
|
|
|
':core' => [ |
22
|
|
|
|
|
|
|
qw(param add_param param_fetch url_param keywords |
23
|
|
|
|
|
|
|
append Delete delete_all Delete_all upload |
24
|
|
|
|
|
|
|
query_string parse_query_string parse_keywordlist |
25
|
|
|
|
|
|
|
Vars save_parameters restore_parameters) |
26
|
|
|
|
|
|
|
], |
27
|
|
|
|
|
|
|
':misc' => [qw(url_decode url_encode escapeHTML unescapeHTML put)], |
28
|
|
|
|
|
|
|
':cookie' => [qw(cookie raw_cookie)], |
29
|
|
|
|
|
|
|
':header' => [qw(header cache no_cache redirect)], |
30
|
|
|
|
|
|
|
':push' => [ |
31
|
|
|
|
|
|
|
qw(multipart_init multipart_start multipart_end |
32
|
|
|
|
|
|
|
multipart_final) |
33
|
|
|
|
|
|
|
], |
34
|
|
|
|
|
|
|
':debug' => [qw(Dump as_string cgi_error _cgi_object)], |
35
|
|
|
|
|
|
|
':cgi-lib' => [ |
36
|
|
|
|
|
|
|
qw(ReadParse SplitParam MethGet MethPost MyBaseUrl MyURL |
37
|
|
|
|
|
|
|
MyFullUrl PrintHeader HtmlTop HtmlBot PrintVariables |
38
|
|
|
|
|
|
|
PrintEnv CgiDie CgiError Vars) |
39
|
|
|
|
|
|
|
], |
40
|
|
|
|
|
|
|
':ssl' => [qw(https)], |
41
|
|
|
|
|
|
|
':access' => [ |
42
|
|
|
|
|
|
|
qw(version nph all_parameters charset crlf globals |
43
|
|
|
|
|
|
|
auth_type content_length content_type document_root |
44
|
|
|
|
|
|
|
gateway_interface path_translated referer remote_addr |
45
|
|
|
|
|
|
|
remote_host remote_ident remote_user request_method |
46
|
|
|
|
|
|
|
script_name server_name server_port server_protocol |
47
|
|
|
|
|
|
|
server_software user_name user_agent virtual_host |
48
|
|
|
|
|
|
|
path_info Accept http https protocol url self_url |
49
|
|
|
|
|
|
|
state) |
50
|
|
|
|
|
|
|
], |
51
|
|
|
|
|
|
|
':internal' => [ |
52
|
|
|
|
|
|
|
qw(_initialize_globals _use_cgi_pm_global_settings |
53
|
|
|
|
|
|
|
_store_globals _reset_globals) |
54
|
|
|
|
|
|
|
] |
55
|
|
|
|
|
|
|
); |
56
|
|
|
|
|
|
|
|
57
|
|
|
|
|
|
|
# BEGIN { |
58
|
|
|
|
|
|
|
# $SIG{__DIE__} = sub { croak "Undefined Method : @_\n" } |
59
|
|
|
|
|
|
|
# } |
60
|
|
|
|
|
|
|
|
61
|
|
|
|
|
|
|
sub import { |
62
|
3
|
|
|
3
|
|
34
|
my ( $self, @args ) = @_; |
63
|
3
|
|
|
|
|
6
|
my $package = caller(); |
64
|
3
|
|
|
|
|
7
|
my ( %exports, %pragmas ); |
65
|
3
|
|
|
|
|
8
|
for my $arg ( @args ) { |
66
|
5
|
50
|
|
|
|
28
|
$exports{$arg}++, next if $arg =~ m/^\w+$/; |
67
|
5
|
100
|
|
|
|
23
|
$pragmas{$arg}++, next if $arg =~ m/^-\w+$/; |
68
|
3
|
50
|
|
|
|
15
|
if ( $arg =~ m/^:[-\w]+$/ ) { |
69
|
3
|
50
|
|
|
|
10
|
if ( exists $EXPORT_TAGS{$arg} ) { |
70
|
3
|
|
|
|
|
6
|
my @tags = @{ $EXPORT_TAGS{$arg} }; |
|
3
|
|
|
|
|
10
|
|
71
|
3
|
|
|
|
|
8
|
for my $tag ( @tags ) { |
72
|
|
|
|
|
|
|
my @expanded |
73
|
|
|
|
|
|
|
= exists $EXPORT_TAGS{$tag} |
74
|
27
|
50
|
|
|
|
53
|
? @{ $EXPORT_TAGS{$tag} } |
|
27
|
|
|
|
|
70
|
|
75
|
|
|
|
|
|
|
: ( $tag ); |
76
|
27
|
|
|
|
|
167
|
$exports{$_}++ for @expanded; |
77
|
|
|
|
|
|
|
} |
78
|
|
|
|
|
|
|
} |
79
|
|
|
|
|
|
|
else { |
80
|
0
|
|
|
|
|
0
|
croak |
81
|
|
|
|
|
|
|
"No '$arg' tag set available for export from CGI::Simple::Standard!\n"; |
82
|
|
|
|
|
|
|
} |
83
|
|
|
|
|
|
|
} |
84
|
|
|
|
|
|
|
} |
85
|
3
|
|
|
|
|
35
|
my @exports = keys %exports; |
86
|
3
|
|
|
|
|
6
|
my %valid_exports; |
87
|
3
|
|
|
|
|
4
|
for my $tag ( @{ $EXPORT_TAGS{':all'} } ) { |
|
3
|
|
|
|
|
9
|
|
88
|
27
|
|
|
|
|
36
|
$valid_exports{$_}++ for @{ $EXPORT_TAGS{$tag} }; |
|
27
|
|
|
|
|
203
|
|
89
|
|
|
|
|
|
|
} |
90
|
3
|
|
|
|
|
9
|
for ( @exports ) { |
91
|
|
|
|
|
|
|
croak |
92
|
|
|
|
|
|
|
"'$_' is not an available export method from CGI::Simple::Standard!\n" |
93
|
261
|
50
|
|
|
|
420
|
unless exists $valid_exports{$_}; |
94
|
|
|
|
|
|
|
} |
95
|
3
|
|
|
3
|
|
24
|
no strict 'refs'; |
|
3
|
|
|
|
|
4
|
|
|
3
|
|
|
|
|
951
|
|
96
|
3
|
50
|
|
|
|
9
|
if ( exists $pragmas{'-autoload'} ) { |
97
|
|
|
|
|
|
|
|
98
|
|
|
|
|
|
|
# hack symbol table to export our AUTOLOAD sub |
99
|
0
|
|
|
|
|
0
|
*{"${package}::AUTOLOAD"} = sub { |
100
|
0
|
|
|
0
|
|
0
|
my ( $caller, $sub ) = $AUTOLOAD =~ m/(.*)::(\w+)$/; |
101
|
0
|
|
|
|
|
0
|
&CGI::Simple::Standard::loader( $caller, $sub, @_ ); |
102
|
0
|
|
|
|
|
0
|
}; |
103
|
0
|
|
|
|
|
0
|
delete $pragmas{'-autoload'}; |
104
|
|
|
|
|
|
|
} |
105
|
3
|
|
|
|
|
11
|
my @pragmas = keys %pragmas; |
106
|
3
|
100
|
|
|
|
19
|
CGI::Simple->import( @pragmas ) if @pragmas; |
107
|
|
|
|
|
|
|
|
108
|
|
|
|
|
|
|
# export subroutine stubs for all the desired export functions |
109
|
|
|
|
|
|
|
# we will replace them in the symbol table with the real thing |
110
|
|
|
|
|
|
|
# if and when they are first called |
111
|
3
|
|
|
|
|
11
|
for my $i ( 0 .. $#exports ) { |
112
|
261
|
|
|
|
|
13503
|
*{"${package}::$exports[$i]"} = sub { |
113
|
133
|
|
|
133
|
|
52649
|
my $caller = caller; |
114
|
133
|
|
|
|
|
435
|
&CGI::Simple::Standard::loader( $caller, $exports[$i], @_ ); |
115
|
|
|
|
|
|
|
} |
116
|
261
|
|
|
|
|
921
|
} |
117
|
|
|
|
|
|
|
} |
118
|
|
|
|
|
|
|
|
119
|
|
|
|
|
|
|
# loader() may be called either via our exported AUTOLOAD sub or by the |
120
|
|
|
|
|
|
|
# subroutine stubs we exported on request. It has three functions: |
121
|
|
|
|
|
|
|
# 1) to initialize and store (via a closure) our CGI::Simple object |
122
|
|
|
|
|
|
|
# 2) to overwrite the exported subroutine stubs with calls to the real ones |
123
|
|
|
|
|
|
|
# 3) to provide two 'virtual' methods - _cgi_object() and restore_parameters() |
124
|
|
|
|
|
|
|
# restore_parameters effectively functions like new() for the OO interface. |
125
|
|
|
|
|
|
|
{ |
126
|
|
|
|
|
|
|
my $q; |
127
|
|
|
|
|
|
|
|
128
|
|
|
|
|
|
|
sub loader { |
129
|
133
|
|
|
133
|
0
|
252
|
my $package = shift; |
130
|
133
|
|
|
|
|
258
|
my $sub = shift; |
131
|
133
|
100
|
|
|
|
347
|
if ( $sub eq '_cgi_object' ) { # for debugging get at the object |
132
|
3
|
50
|
|
|
|
11
|
$q = CGI::Simple->new( @_ ) unless $q; |
133
|
3
|
|
|
|
|
16
|
return $q; |
134
|
|
|
|
|
|
|
} |
135
|
130
|
100
|
100
|
|
|
601
|
if ( !$q or $sub eq 'restore_parameters' ) { |
136
|
27
|
100
|
|
|
|
62
|
if ( $sub eq 'restore_parameters' ) { |
137
|
25
|
|
|
|
|
119
|
$q = CGI::Simple->new( @_ ); |
138
|
25
|
|
|
|
|
90
|
return; |
139
|
|
|
|
|
|
|
} |
140
|
|
|
|
|
|
|
else { |
141
|
2
|
|
|
|
|
16
|
$q = CGI::Simple->new; |
142
|
|
|
|
|
|
|
} |
143
|
|
|
|
|
|
|
} |
144
|
|
|
|
|
|
|
|
145
|
|
|
|
|
|
|
# hack the symbol table and insert the sub so we only use loader once |
146
|
|
|
|
|
|
|
# get strict to look the other way while we use sym refs |
147
|
3
|
|
|
3
|
|
24
|
no strict 'refs'; |
|
3
|
|
|
|
|
6
|
|
|
3
|
|
|
|
|
686
|
|
148
|
|
|
|
|
|
|
|
149
|
|
|
|
|
|
|
# stop warnings screaming about redefined subs |
150
|
105
|
|
|
|
|
477
|
local $^W = 0; |
151
|
|
|
|
|
|
|
|
152
|
|
|
|
|
|
|
# hack to ensure %in ends in right package when exported by ReadParse |
153
|
105
|
100
|
66
|
|
|
280
|
@_ = ( *{"${package}::in"} ) if $sub eq 'ReadParse' and !@_; |
|
1
|
|
|
|
|
10
|
|
154
|
|
|
|
|
|
|
|
155
|
|
|
|
|
|
|
# write the required sub to the callers symbol table |
156
|
105
|
|
|
302
|
|
511
|
*{"${package}::$sub"} = sub { $q->$sub( @_ ) }; |
|
105
|
|
|
|
|
486
|
|
|
302
|
|
|
|
|
60013
|
|
157
|
|
|
|
|
|
|
|
158
|
|
|
|
|
|
|
# now we have inserted the sub let's call it and return the results :-) |
159
|
105
|
|
|
|
|
180
|
return &{"${package}::$sub"}; |
|
105
|
|
|
|
|
259
|
|
160
|
|
|
|
|
|
|
} |
161
|
|
|
|
|
|
|
} |
162
|
|
|
|
|
|
|
|
163
|
|
|
|
|
|
|
1; |
164
|
|
|
|
|
|
|
|
165
|
|
|
|
|
|
|
=head1 NAME |
166
|
|
|
|
|
|
|
|
167
|
|
|
|
|
|
|
CGI::Simple::Standard - a wrapper module for CGI::Simple that provides a |
168
|
|
|
|
|
|
|
function style interface |
169
|
|
|
|
|
|
|
|
170
|
|
|
|
|
|
|
=head1 SYNOPSIS |
171
|
|
|
|
|
|
|
|
172
|
|
|
|
|
|
|
use CGI::Simple::Standard qw( -autoload ); |
173
|
|
|
|
|
|
|
use CGI::Simple::Standard qw( :core :cookie :header :misc ); |
174
|
|
|
|
|
|
|
use CGI::Simple::Standard qw( param upload ); |
175
|
|
|
|
|
|
|
|
176
|
|
|
|
|
|
|
$CGI::Simple::Standard::POST_MAX = 1024; # max upload via post 1kB |
177
|
|
|
|
|
|
|
$CGI::Simple::Standard::DISABLE_UPLOADS = 0; # enable uploads |
178
|
|
|
|
|
|
|
|
179
|
|
|
|
|
|
|
@params = param(); # return all param names as a list |
180
|
|
|
|
|
|
|
$value = param('foo'); # return the first value supplied for 'foo' |
181
|
|
|
|
|
|
|
@values = param('foo'); # return all values supplied for foo |
182
|
|
|
|
|
|
|
|
183
|
|
|
|
|
|
|
%fields = Vars(); # returns untied key value pair hash |
184
|
|
|
|
|
|
|
$hash_ref = Vars(); # or as a hash ref |
185
|
|
|
|
|
|
|
%fields = Vars("|"); # packs multiple values with "|" rather than "\0"; |
186
|
|
|
|
|
|
|
|
187
|
|
|
|
|
|
|
@keywords = keywords(); # return all keywords as a list |
188
|
|
|
|
|
|
|
|
189
|
|
|
|
|
|
|
param( 'foo', 'some', 'new', 'values' ); # set new 'foo' values |
190
|
|
|
|
|
|
|
param( -name=>'foo', -value=>'bar' ); |
191
|
|
|
|
|
|
|
param( -name=>'foo', -value=>['bar','baz'] ); |
192
|
|
|
|
|
|
|
|
193
|
|
|
|
|
|
|
append( -name=>'foo', -value=>'bar' ); # append values to 'foo' |
194
|
|
|
|
|
|
|
append( -name=>'foo', -value=>['some', 'new', 'values'] ); |
195
|
|
|
|
|
|
|
|
196
|
|
|
|
|
|
|
Delete('foo'); # delete param 'foo' and all its values |
197
|
|
|
|
|
|
|
Delete_all(); # delete everything |
198
|
|
|
|
|
|
|
|
199
|
|
|
|
|
|
|
|
200
|
|
|
|
|
|
|
|
201
|
|
|
|
|
|
|
$files = upload() # number of files uploaded |
202
|
|
|
|
|
|
|
@files = upload(); # names of all uploaded files |
203
|
|
|
|
|
|
|
$filename = param('upload_file') # filename of 'upload_file' field |
204
|
|
|
|
|
|
|
$mime = upload_info($filename,'mime'); # MIME type of uploaded file |
205
|
|
|
|
|
|
|
$size = upload_info($filename,'size'); # size of uploaded file |
206
|
|
|
|
|
|
|
|
207
|
|
|
|
|
|
|
my $fh = $q->upload($filename); # open filehandle to read from |
208
|
|
|
|
|
|
|
while ( read( $fh, $buffer, 1024 ) ) { ... } |
209
|
|
|
|
|
|
|
|
210
|
|
|
|
|
|
|
# short and sweet upload |
211
|
|
|
|
|
|
|
$ok = upload( param('upload_file'), '/path/to/write/file.name' ); |
212
|
|
|
|
|
|
|
print "Uploaded ".param('upload_file')." and wrote it OK!" if $ok; |
213
|
|
|
|
|
|
|
|
214
|
|
|
|
|
|
|
$decoded = url_decode($encoded); |
215
|
|
|
|
|
|
|
$encoded = url_encode($unencoded); |
216
|
|
|
|
|
|
|
$escaped = escapeHTML('<>"&'); |
217
|
|
|
|
|
|
|
$unescaped = unescapeHTML('<>"&'); |
218
|
|
|
|
|
|
|
|
219
|
|
|
|
|
|
|
$qs = query_string(); # get all data in $q as a query string OK for GET |
220
|
|
|
|
|
|
|
|
221
|
|
|
|
|
|
|
no_cache(1); # set Pragma: no-cache + expires |
222
|
|
|
|
|
|
|
print header(); # print a simple header |
223
|
|
|
|
|
|
|
# get a complex header |
224
|
|
|
|
|
|
|
$header = header( -type => 'image/gif' |
225
|
|
|
|
|
|
|
-nph => 1, |
226
|
|
|
|
|
|
|
-status => '402 Payment required', |
227
|
|
|
|
|
|
|
-expires =>'+24h', |
228
|
|
|
|
|
|
|
-cookie => $cookie, |
229
|
|
|
|
|
|
|
-charset => 'utf-7', |
230
|
|
|
|
|
|
|
-attachment => 'foo.gif', |
231
|
|
|
|
|
|
|
-Cost => '$2.00'); |
232
|
|
|
|
|
|
|
|
233
|
|
|
|
|
|
|
@cookies = cookie(); # get names of all available cookies |
234
|
|
|
|
|
|
|
$value = cookie('foo') # get first value of cookie 'foo' |
235
|
|
|
|
|
|
|
@value = cookie('foo') # get all values of cookie 'foo' |
236
|
|
|
|
|
|
|
# get a cookie formatted for header() method |
237
|
|
|
|
|
|
|
$cookie = cookie( -name => 'Password', |
238
|
|
|
|
|
|
|
-values => ['superuser','god','my dog woofie'], |
239
|
|
|
|
|
|
|
-expires => '+3d', |
240
|
|
|
|
|
|
|
-domain => '.nowhere.com', |
241
|
|
|
|
|
|
|
-path => '/cgi-bin/database', |
242
|
|
|
|
|
|
|
-secure => 1 ); |
243
|
|
|
|
|
|
|
print header( -cookie=>$cookie ); # set cookie |
244
|
|
|
|
|
|
|
|
245
|
|
|
|
|
|
|
print redirect('http://go.away.now'); # print a redirect header |
246
|
|
|
|
|
|
|
|
247
|
|
|
|
|
|
|
dienice( cgi_error() ) if cgi_error(); |
248
|
|
|
|
|
|
|
|
249
|
|
|
|
|
|
|
=head1 DESCRIPTION |
250
|
|
|
|
|
|
|
|
251
|
|
|
|
|
|
|
This module is a wrapper for the completely object oriented CGI::Simple |
252
|
|
|
|
|
|
|
module and provides a simple functional style interface. It provides two |
253
|
|
|
|
|
|
|
different methods to import function names into your namespace. |
254
|
|
|
|
|
|
|
|
255
|
|
|
|
|
|
|
=head2 Autoloading |
256
|
|
|
|
|
|
|
|
257
|
|
|
|
|
|
|
If you specify the '-autoload' pragma like this: |
258
|
|
|
|
|
|
|
|
259
|
|
|
|
|
|
|
use CGI::Simple::Standard qw( -autoload ); |
260
|
|
|
|
|
|
|
|
261
|
|
|
|
|
|
|
Then it will use AUTOLOAD and a symbol table trick to export only those subs |
262
|
|
|
|
|
|
|
you actually call into your namespace. When you specify the '-autoload' pragma |
263
|
|
|
|
|
|
|
this module exports a single AUTOLOAD subroutine into you namespace. This will |
264
|
|
|
|
|
|
|
clash with any AUTOLOAD sub that exists in the calling namespace so if you are |
265
|
|
|
|
|
|
|
using AUTOLOAD for something else don't use this pragma. |
266
|
|
|
|
|
|
|
|
267
|
|
|
|
|
|
|
Anyway, when you call a subroutine that is not defined in your script this |
268
|
|
|
|
|
|
|
AUTOLOAD sub will be called. The first time this happens it |
269
|
|
|
|
|
|
|
will initialize a CGI::Simple object and then apply the requested method |
270
|
|
|
|
|
|
|
(if it exists) to it. A fatal exception will be thrown if you try to use an |
271
|
|
|
|
|
|
|
undefined method (function). |
272
|
|
|
|
|
|
|
|
273
|
|
|
|
|
|
|
=head2 Specified Export |
274
|
|
|
|
|
|
|
|
275
|
|
|
|
|
|
|
Alternatively you can specify the functions you wish to import. You can do |
276
|
|
|
|
|
|
|
this on a per function basis like this: |
277
|
|
|
|
|
|
|
|
278
|
|
|
|
|
|
|
use CGI::Simple::Standard qw( param upload query_string Dump ); |
279
|
|
|
|
|
|
|
|
280
|
|
|
|
|
|
|
or utilize the %EXPORT_TAGS that group functions into related groups. |
281
|
|
|
|
|
|
|
Here are the groupings: |
282
|
|
|
|
|
|
|
|
283
|
|
|
|
|
|
|
%EXPORT_TAGS = ( |
284
|
|
|
|
|
|
|
':html' => [ qw(:misc) ], |
285
|
|
|
|
|
|
|
':standard' => [ qw(:core :access) ], |
286
|
|
|
|
|
|
|
':cgi' => [ qw(:core :access) ], |
287
|
|
|
|
|
|
|
':all' => [ qw(:core :misc :cookie :header :push :debug :cgi-lib |
288
|
|
|
|
|
|
|
:access :internal) ], |
289
|
|
|
|
|
|
|
':core' => [ qw(param add_param param_fetch url_param keywords |
290
|
|
|
|
|
|
|
append Delete delete_all Delete_all upload |
291
|
|
|
|
|
|
|
query_string parse_query_string parse_keywordlist |
292
|
|
|
|
|
|
|
Vars save_parameters restore_parameters) ], |
293
|
|
|
|
|
|
|
':misc' => [ qw(url_decode url_encode escapeHTML unescapeHTML put) ], |
294
|
|
|
|
|
|
|
':cookie' => [ qw(cookie raw_cookie) ], |
295
|
|
|
|
|
|
|
':header' => [ qw(header cache no_cache redirect) ], |
296
|
|
|
|
|
|
|
':push' => [ qw(multipart_init multipart_start multipart_end |
297
|
|
|
|
|
|
|
multipart_final) ], |
298
|
|
|
|
|
|
|
':debug' => [ qw(Dump as_string cgi_error _cgi_object) ], |
299
|
|
|
|
|
|
|
':cgi-lib' => [ qw(ReadParse SplitParam MethGet MethPost MyBaseUrl MyURL |
300
|
|
|
|
|
|
|
MyFullUrl PrintHeader HtmlTop HtmlBot PrintVariables |
301
|
|
|
|
|
|
|
PrintEnv CgiDie CgiError Vars) ], |
302
|
|
|
|
|
|
|
':ssl' => [ qw(https) ], |
303
|
|
|
|
|
|
|
':access' => [ qw(version nph all_parameters charset crlf globals |
304
|
|
|
|
|
|
|
auth_type content_length content_type document_root |
305
|
|
|
|
|
|
|
gateway_interface path_translated referer remote_addr |
306
|
|
|
|
|
|
|
remote_host remote_ident remote_user request_method |
307
|
|
|
|
|
|
|
script_name server_name server_port server_protocol |
308
|
|
|
|
|
|
|
server_software user_name user_agent virtual_host |
309
|
|
|
|
|
|
|
path_info Accept http https protocol url self_url |
310
|
|
|
|
|
|
|
state) ], |
311
|
|
|
|
|
|
|
':internal' => [ qw(_initialize_globals _use_cgi_pm_global_settings |
312
|
|
|
|
|
|
|
_store_globals _reset_globals) ] |
313
|
|
|
|
|
|
|
); |
314
|
|
|
|
|
|
|
|
315
|
|
|
|
|
|
|
|
316
|
|
|
|
|
|
|
The familiar CGI.pm tags are available but do not include the HTML |
317
|
|
|
|
|
|
|
functionality. You specify the import of some function groups like this: |
318
|
|
|
|
|
|
|
|
319
|
|
|
|
|
|
|
use CGI::Simple::Standard qw( :core :cookie :header ); |
320
|
|
|
|
|
|
|
|
321
|
|
|
|
|
|
|
Note that the function groups all start with a : char. |
322
|
|
|
|
|
|
|
|
323
|
|
|
|
|
|
|
=head2 Mix and Match |
324
|
|
|
|
|
|
|
|
325
|
|
|
|
|
|
|
You can use the '-autoload' pragma, specifically named function imports and |
326
|
|
|
|
|
|
|
tag group imports together if you desire. |
327
|
|
|
|
|
|
|
|
328
|
|
|
|
|
|
|
=head1 $POST_MAX and $DISABLE_UPLOADS |
329
|
|
|
|
|
|
|
|
330
|
|
|
|
|
|
|
If you wish to set $POST_MAX or $DISABLE_UPLOADS you must do this *after* the |
331
|
|
|
|
|
|
|
use statement and *before* the first function call as shown in the synopsis. |
332
|
|
|
|
|
|
|
|
333
|
|
|
|
|
|
|
Unlike CGI.pm uploads are disabled by default and the maximum acceptable |
334
|
|
|
|
|
|
|
data via post is capped at 102_400kB rather than infinity. This is specifically |
335
|
|
|
|
|
|
|
to avoid denial of service attacks by default. To enable uploads and to |
336
|
|
|
|
|
|
|
allow them to be of infinite size you simply: |
337
|
|
|
|
|
|
|
|
338
|
|
|
|
|
|
|
$CGI::Simple::Standard::POST_MAX = -1; # infinite size upload |
339
|
|
|
|
|
|
|
$CGI::Simple::Standard::$DISABLE_UPLOADS = 0; # enable uploads |
340
|
|
|
|
|
|
|
|
341
|
|
|
|
|
|
|
Alternatively you can specify the CGI.pm default values as shown above by |
342
|
|
|
|
|
|
|
specifying the '-default' pragma in your use statement. |
343
|
|
|
|
|
|
|
|
344
|
|
|
|
|
|
|
use CGI::Simple::Standard qw( -default ..... ); |
345
|
|
|
|
|
|
|
|
346
|
|
|
|
|
|
|
=head1 EXPORT |
347
|
|
|
|
|
|
|
|
348
|
|
|
|
|
|
|
Nothing by default. |
349
|
|
|
|
|
|
|
|
350
|
|
|
|
|
|
|
Under the '-autoload' pragma the AUTOLOAD subroutine is |
351
|
|
|
|
|
|
|
exported into the calling namespace. Additional subroutines are only imported |
352
|
|
|
|
|
|
|
into this namespace if you physically call them. They are installed in the |
353
|
|
|
|
|
|
|
symbol table the first time you use them to save repeated calls to AUTOLOAD. |
354
|
|
|
|
|
|
|
|
355
|
|
|
|
|
|
|
If you specifically request a function or group of functions via an EXPORT_TAG |
356
|
|
|
|
|
|
|
then stubs of these functions are exported into the calling namespace. These |
357
|
|
|
|
|
|
|
stub functions will be replaced with the real functions only if you actually |
358
|
|
|
|
|
|
|
call them saving wasted compilation effort. |
359
|
|
|
|
|
|
|
|
360
|
|
|
|
|
|
|
=head1 FUNCTION DETAILS |
361
|
|
|
|
|
|
|
|
362
|
|
|
|
|
|
|
This is a wrapper module for CGI::Simple. Virtually all the methods available |
363
|
|
|
|
|
|
|
in the OO interface are available via the functional interface. Several |
364
|
|
|
|
|
|
|
method names are aliased to prevent namespace conflicts: |
365
|
|
|
|
|
|
|
|
366
|
|
|
|
|
|
|
$q->delete('foo') => Delete('foo') |
367
|
|
|
|
|
|
|
$q->delete_all => Delete_all() or delete_all() |
368
|
|
|
|
|
|
|
$q->save(\*FH) => save_parameters(\*FH) |
369
|
|
|
|
|
|
|
$q->accept() => Accept() |
370
|
|
|
|
|
|
|
|
371
|
|
|
|
|
|
|
Although you could use the new() function to genrate new OO CGI::Simple |
372
|
|
|
|
|
|
|
objects the restore_parameters() function is a better choice as it operates |
373
|
|
|
|
|
|
|
like new but on the correct underlying CGI::Simple object for the functional |
374
|
|
|
|
|
|
|
interface. |
375
|
|
|
|
|
|
|
|
376
|
|
|
|
|
|
|
restore_parameters() can be used exactly as you might use new() in that |
377
|
|
|
|
|
|
|
you can supply arguments to it such as query strings, hashes and file handles |
378
|
|
|
|
|
|
|
to re-initialize your underlying object. |
379
|
|
|
|
|
|
|
|
380
|
|
|
|
|
|
|
$q->new CGI::Simple() => restore_parameters() |
381
|
|
|
|
|
|
|
$q->new CGI::Simple({foo=>'bar'}) => restore_parameters({foo=>'bar'}) |
382
|
|
|
|
|
|
|
$q->new CGI::Simple($query_string) => restore_parameters($query_string) |
383
|
|
|
|
|
|
|
$q->new CGI::Simple(\*FH) => restore_parameters(\*FH) |
384
|
|
|
|
|
|
|
|
385
|
|
|
|
|
|
|
For full details of the available functions see the CGI::Simple docs. Just |
386
|
|
|
|
|
|
|
remove the $q-> part and use the method name directly. |
387
|
|
|
|
|
|
|
|
388
|
|
|
|
|
|
|
=head1 BUGS |
389
|
|
|
|
|
|
|
|
390
|
|
|
|
|
|
|
As this is 0.01 there are almost bound to be some. |
391
|
|
|
|
|
|
|
|
392
|
|
|
|
|
|
|
=head1 AUTHOR |
393
|
|
|
|
|
|
|
|
394
|
|
|
|
|
|
|
Dr James Freeman Ejfreeman@tassie.net.auE |
395
|
|
|
|
|
|
|
This release by Andy Armstrong |
396
|
|
|
|
|
|
|
|
397
|
|
|
|
|
|
|
This package is free software and is provided "as is" without express or |
398
|
|
|
|
|
|
|
implied warranty. It may be used, redistributed and/or modified under the terms |
399
|
|
|
|
|
|
|
of the Perl Artistic License (see http://www.perl.com/perl/misc/Artistic.html) |
400
|
|
|
|
|
|
|
|
401
|
|
|
|
|
|
|
Address bug reports and comments to: andy@hexten.net |
402
|
|
|
|
|
|
|
|
403
|
|
|
|
|
|
|
=head1 CREDITS |
404
|
|
|
|
|
|
|
|
405
|
|
|
|
|
|
|
The interface and key sections of the CGI::Simple code come from |
406
|
|
|
|
|
|
|
CGI.pm by Lincoln Stein. |
407
|
|
|
|
|
|
|
|
408
|
|
|
|
|
|
|
=head1 SEE ALSO |
409
|
|
|
|
|
|
|
|
410
|
|
|
|
|
|
|
L which is the back end for this module, |
411
|
|
|
|
|
|
|
B |
412
|
|
|
|
|
|
|
|
413
|
|
|
|
|
|
|
=cut |
414
|
|
|
|
|
|
|
|