The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

#!/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 Cwd;
use Carp qw(confess);
=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
=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;
print $pod;
print "\"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) {
print "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;
}
}