ASP - a Module for ASP Programming |
 
ASP - a Module for ASP (PerlScript) Programming
use strict; use ASP qw(:strict);
print "Testing, testing.<BR><BR>"; my $item = param('item');
if($item eq 'Select one...') { die "Please select a value from the list."; }
print "You selected $item."; exit;
This module is based on Matt Sergeant's excellent Win32::ASP module, which can be found at <http://www.fastnetltd.ndirect.co.uk/Perl>. After using Mr. Sergeant's module, I took on the task of customizing and optimizing it for my own purposes. Feel free to use it if you find it useful.
Both of the print()
and warn()
standard perl
funcs are overloaded to output to the browser. print()
is also
available via the $ASP::ASPOUT->print() method call.
$Request->ServerVariables are stuffed in %ENV
to more
closely resemble CGI.pm
ASP.pm now exports the $ScriptingNamespace
symbol. This symbol
allows PerlScript to call subs/functions written in another script
language. For example:
<%@ language=PerlScript %> <% use ASP qw(:strict); print $ScriptingNamespace->SomeSub("arg1"); %> <SCRIPT language=VBScript runat=server> Function SomeSub (str) SomeSub = SomethingThatReturnsSomething() End Function </SCRIPT>
This module can be installed via my PPM repository at
http://dichosoft.com/perl
Exports basic subs: Print, Warn, die, exit, param, param_count.
Allows the use of the ASP objects under use strict;
.
NOTE: This is not the only way to accomplish this, but I think it's the cleanest, most convenient way.
Same as use ASP;
. Exports all subs except those marked 'not exported'.
Overloads print()
and warn()
and provides the
$ASP::ASPOUT object.
warn
(or more specifically, the __WARN__ signal) has been re-routed to output to
the browser.
FYI: When implemented, this tweak led to the removal of the prototypes Matt placed on his subs.
print
is overloaded to write to the browser by default. The inherent behavior of
print has not been altered and you can still use an alternate filehandle as
you normally would. This allows you to use print just as you would in CGI
scripts. The following statement would need no modification between CGI and
ASP PerlScript:
print param('URL'), " was requested by ", $ENV{REMOTE_HOST}, "\n";
Prints a string or comma separated list of strings to the browser. Use as
if you were using print
in a CGI application. Print gets around ASP's limitations of 128k in a
single $Response->Write() call.
NB: print
calls Print, so you could use either, but print more closely resembles
perl.
Output is displayed between HTML comments so the output doesn't interfere with page aesthetics.
The same as Print
except the output is HTML-encoded so that any HTML tags appear as sent,
i.e. < becomes <, > becomes > etc.
Prints the contents of LIST to the browser and then exits. die
automatically calls $Response->End for you, it also executes any cleanup
code you have added with AddDeathHook
.
Exits the current script. $Response->End is called automatically for
you. Any cleanup code added with AddDeathHook
is also called.
Escapes (URL-encodes) a list. Uses ASP object method $Server->URLEncode().
Unescapes a URL-encoded list. Algorithms ripped from CGI.pm method of the same name.
Escapes a list of HTML. Uses ASP object method $Server->HTMLEncode().
If passed an array reference, escapeHTML will return a reference to the escaped array.
Unescapes an HTML-encoded list.
If passed an array reference, unescapeHTML will return a reference to the un-escaped array.
Simplifies parameter access and makes switch from GET to POST transparent.
Given the following querystring:
myscript.asp?x=a&x=b&y=c
param() returns ('x', 'y') param('y') returns 'c' param('x') returns ('a', 'b') param('x',1) returns 'a' param('x',2) returns 'b'
Returns the number of times EXPR appears in the request (Form or QueryString).
For example, if URL is
myscript.asp?x=a&x=b&y=c
then
param_count('x');
returns 2.
Allows cleanup code to be executed when you die
or exit
. Useful for closing database connections in the event of a fatal error.
<% my $conn = Win32::OLE-new('ADODB.Connection'); $conn->Open("MyDSN"); $conn->BeginTrans(); ASP::AddDeathHook( sub { $Conn->Close if $Conn; } ); %>
Death hooks should be executed on a graceful exit of the script too but this hasn't been confirmed. If anyone has any luck, let me know.
AddDeathHook is not exported.
Performs the same function as $Response->BinaryWrite() but gets around Perl's lack of unicode support, and the null padding it uses to get around this. Example:
ASP::BinaryWrite($val);
BinaryWrite is not exported.
Sets the cookie Name with the value Value. HASH is optional, and contains any of the following optional parameters:
-expires => CGI.pm style expires value -domain => domain that the cookie is returned to; eg, ".domain.com" -path => a path that the cookie is returned to. -secure => cookie only returned under SSL if true.
If Value is a hash ref, then it creates a cookie dictionary. (see either the ASP docs, or my Introduction to PerlScript for more info on Cookie Dictionaries).
Example:
ASP::SetCookie("Options", { bg=>'white', text=>'black' }, ( -expires => "+3h", -domain => ".dichosoft.com", -path => "/perl", -secure => 0 ) );
SetCookie is not exported.
Tim Hammerquist <tim@dichosoft.com>
The escapeHTML()
and unescapeHTML()
functions now
accept array refs as well as lists, as Win32::ASP::HTMLEncode() was
supposed to. Thanks to Matt Sergeant for the fix.
Optimized and debugged.
Overloaded warn()
and subsequently removed prototypes.
Exported $ScriptingNamespace
object.
Added methods escape(),
unescape(),
escapeHTML(),
unescapeHTML().
Thanks to Bill Odom
for pointing these out!
Re-implemented SetCookie and BinaryWrite functions.
Optimized and debugged.
ASP - a Module for ASP Programming |