—#!/usr/bin/perl
# for more accurate per request time accounting
BEGIN {
eval
"use Time::HiRes"
;
$Apache::ASP::QuickStartTime
=
eval
{
&Time::HiRes::time
(); } ||
time
();
}
# help section
use
File::Basename;
use
Getopt::Std;
use
Cwd;
use
Apache::ASP::CGI;
=pod
=head1 NAME
asp-perl - Apache::ASP CGI and command line script processor
=head1 SYNOPSIS
asp-perl [-hsdb] [-f asp.conf] [-o directory] file1 @arguments file2 @arguments ...
-h Help you are getting now!
-f Specify an alternate configuration file other than ./asp.conf
-s Setup $Session and $Application state for script.
-d Set to debug code upon errors.
-b Only return body of document, no headers.
-o Output directory, writes to files there instead of STDOUT
-p GlobalPackage config, what perl package are the scripts compiled in.
=head1 DESCRIPTION
This program will run Apache::ASP scripts from the command line.
Each file that is specified will be run, and the
$Request->QueryString() and $Request->Form() data will be
initialized by the @arguments following the script file name.
The @arguments will be written as space separated
words, and will be initialized as an associate array where
%arguments = @arguments. As an example:
asp-perl file.asp key1 value1 key2 value2
would be similar to calling the file.asp in a web environment like
/file.asp?key1=value1&key2=value2
The asp.conf script will be read from the current directory
for parameters that would be set with PerlSetVar normally under
mod_perl. For more information on how to configure the asp.conf
file, please see < http://www.apache-asp.org/cgi.html >
=head1 SEE ALSO
perldoc Apache::ASP, and also http://www.apache-asp.org
=head1 COPYRIGHT
Copyright 1998-2004 Joshua Chamas, Chamas Enterprises Inc.
This program is distributed under the GPL. Please see the LICENSE
file in the Apache::ASP distribution for more information.
=cut
$SIG
{__DIE__} = \
&confess
;
getopts(
'hsdbo:p:f:'
);
if
(
$opt_h
|| !
@ARGV
) {
open
(SCRIPT, $0) ||
die
(
"can't open $0 for reading: $!"
);
my
$script
=
join
(
''
, <SCRIPT>);
close
SCRIPT;
$script
=~ /=pod\s(.*?)=cut/s;
my
$pod
= $1;
$pod
=~ s/\=head1 (\w+)/$1/isg;
$pod
=~ s/DESCRIPTION.*//isg;
$pod
;
"\"perldoc asp-perl\" or \"man asp-perl\" for more information\n\n"
;
exit
;
}
if
(
$opt_o
&& ! -e
$opt_o
) {
mkdir
(
$opt_o
, 0750) ||
die
(
"can't mkdir $opt_o"
);
}
$Config
=
''
;
my
$config_file
=
$opt_f
||
'asp.conf'
;
if
(-e
$config_file
) {
# read in .asp to load %Config
open
(CONFIG,
$config_file
) ||
die
(
"can't open $config_file: $!"
);
$Config
=
join
(
''
, <CONFIG>);
close
CONFIG;
}
else
{
if
(
$opt_f
) {
die
(
"Configuration file $opt_f does not exist!"
);
}
}
my
$cwd
= cwd();
while
(
@ARGV
) {
$cwd
&& (
chdir
(
$cwd
) ||
die
(
"can't chdir to $cwd"
));
my
$file
=
shift
@ARGV
;
my
@script_args
;
unless
(-e
$file
) {
"file $file does not exist\n"
;
next
;
}
while
(
@ARGV
) {
last
if
(-e
$ARGV
[0]);
push
(
@script_args
,
shift
@ARGV
);
}
if
(
$opt_o
) {
my
$basename
= basename(
$file
);
open
(STDOUT,
">$opt_o/$basename"
) ||
die
(
"can't open $opt_o/$basename for writing"
);
}
$r
= Apache::ASP::CGI->init(
$file
,
@script_args
);
$0 =
$file
;
# might need real $0 in $Config
eval
$Config
;
$@ &&
die
(
"can't eval config error: $@"
);
$r
->dir_config->set(
'NoState'
, 0)
if
$opt_s
;
if
(
$opt_d
) {
$r
->dir_config->set(
'Debug'
, -3);
$r
->dir_config->set(
'CommandLine'
, 1);
}
if
(
$opt_b
) {
$r
->dir_config->set(
'NoHeaders'
, 1);
}
if
(
$opt_p
) {
$r
->dir_config->set(
'GlobalPackage'
,
$opt_p
);
}
for
(
keys
%Config
) {
$r
->dir_config->set(
$_
,
$Config
{
$_
});
}
&Apache::ASP::handler
(
$r
);
if
(
$opt_o
) {
close
STDOUT;
}
}