#!/user/local/bin/perl
my
$r
=
shift
;
my
$sub
=
"test_$ENV{QUERY_STRING}"
;
if
(
defined
&{
$sub
}) {
&{
$sub
}(
$r
);
}
else
{
print
"Status: 200 Bottles of beer on the wall\n"
,
"X-Perl-Version: $]\n"
;
print
"X-Perl-Script: perlio.pl\n"
;
print
"X-Message: hello\n"
;
print
"Content-type: text/plain\n\n"
;
print
"perlio test...\n"
;
print
"\$^X is $^X\n"
if
$^X;
if
($] >= 5.005 &&
$Config
{usesfio} ne
"true"
) {
my
$msg
=
"1234WRITEmethod"
;
syswrite
STDOUT,
$msg
, 5, 4;
print
" to STDOUT works with $] without sfio\n"
;
}
my
$loc
=
$r
->location;
print
"<Location $loc>\n"
;
my
(
@args
);
if
(
@args
=
split
(/\+/,
$ENV
{QUERY_STRING})) {
print
"ARGS: "
,
join
(
", "
,
map
{
$_
=
qq{"$_"}
}
@args
),
"\n\n"
;
}
else
{
print
"No command line arguments passed to script\n\n"
;
}
my
(
$key
,
$val
);
while
((
$key
,
$val
) =
each
%ENV
) {
print
"$key=$val\n"
;
}
if
(
$ENV
{CONTENT_LENGTH}) {
$len
=
$ENV
{CONTENT_LENGTH};
read
(STDIN,
$content
,
$len
);
print
"\nContent\n-------\n$content"
;
}
}
sub
test_1 {
print
"Content-type: text/html\n"
,
"X-sub: "
.
"test_1\n"
;
print
"\r\n"
;
print
"1"
;
}
sub
test_2 {
my
$msg
=
<<"EOF";
X-sub: test_2
Content-type: text/html
2
EOF
chomp
$msg
;
print
$msg
;
}
sub
test_3 {
my
$h
= {
"Content-type"
=>
"text/plain"
,
"X-sub"
=>
"test_3"
,
};
for
(
keys
%$h
) {
print
"$_: $h->{$_}\r\n"
;
}
print
"\r\n"
;
print
"3"
;
}
sub
test_4 {
my
$h
= {
"Content-type"
=>
"text/plain"
,
"X-sub"
=>
"test_4"
,
};
for
(
keys
%$h
) {
print
"$_"
,
": "
,
$h
->{
$_
},
"\r\n"
;
}
print
"\r\n4"
;
}
sub
test_5 {
print
<<EOF;
X-Message: parsethis
Content-type: text/html
A
B
C
D
EOF
}
sub
test_syswrite_1 {
test_syswrite(
shift
);
}
sub
test_syswrite_2 {
test_syswrite(
shift
,160);
}
sub
test_syswrite_3 {
test_syswrite(
shift
,80, 2000);
}
sub
test_syswrite {
my
$r
=
shift
;
my
$len
=
shift
;
my
$offset
=
shift
;
my
$msg
=
""
;
print
"Status: 200 Bottles of beer on the wall\n"
,
"X-Perl-Version: $]\n"
;
print
"X-Perl-Script: perlio.pl\n"
;
print
"X-Message: hello\n"
;
print
"Content-type: text/plain\n\n"
;
for
(
'A'
..
'Z'
) {
$msg
.=
$_
x 80;
}
my
$bytes_sent
=
defined
(
$offset
) ?
syswrite
STDOUT,
$msg
,
$len
,
$offset
:
defined
(
$len
) ?
syswrite
STDOUT,
$msg
,
$len
:
syswrite
STDOUT,
$msg
,
length
(
$msg
);
my
$real_b
=
$r
->bytes_sent;
print
"REAL Bytes sent = $real_b\n"
;
die
"Syswrite error. Bytes wrote=$bytes_sent. Real bytes sent = $real_b\n"
unless
$bytes_sent
==
$real_b
;
}
sub
test_syswrite_noheader {
print
STDERR
"********* This is not a real error. Ignore. *********\n"
;
my
$msg
=
"1234WRITEmethod"
;
syswrite
STDOUT,
$msg
, 5, 4;
}