欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PerlScript编写ASP(转载)

程序员文章站 2023-11-04 20:46:28
nighthawk注:  尽管这些年来perl为广大编程爱好者所熟悉,但却对perl存在一个令人尴尬的误解,以为perl就是cgi,经常有人问我perl和cgi,...
nighthawk注: 
尽管这些年来perl为广大编程爱好者所熟悉,但却对perl存在一个令人尴尬的误解,以为perl就是cgi,经常有人问我perl和cgi,和php,和asp比较如何如何,这是实在是件很遗憾的事情.这里特地贴出下面这篇文摘,也许能减少一些这方面的 误解. 

本文将进一步讲述perl在可嵌入技术的广域性,和perlscript 在脚本技术领域的功用。以前的文章我说了eperl、embed perl和mod_perl 技术,它们都是单独领域的技术,是在本身基础上的延伸。而本文将讲述如何用perlscript写asp,或者是说在asp中写perlscript。 

学习本文后,你将会知道perl是如何强大,它的兼容性是没有任何语言可以比的。在目前web页编程中,最为盛行的技术:cgi、asp、php、jsp等,其中cgi就包含了perl、c/c++、java等技术,在cgi 技术中流行的语言就是perl,perl的历史悠久,有着传统的编程方式和自然编写方法,在asp、php、jsp等技术没有出现之前,是web也编程中最为流行或者说是标准的编程技术。经常有人拿perl或是cgi与asp、php、jsp等技术相比,我在这里想重申一次,perl、cgi与asp、php、jsp不是一个领域一个类别,就好比水果和红薯他们如何比?这些配比方法在小学中就讲述得很详细了,所以希望广大程序技术人员不要被误导。perl是一个语言,它与c/c++、java、basic等是一个类别的一个领域的,而asp(active server page)、php(personal home page)、jsp(java server page),大家可以从英文中看出他们后面都有page,简单的你可以理解成为超文本语言html的服务器端语言,而真正输出的html是客户端语言。我编写cgi,特别是用perl编写了几年的程序,写了无数的商业软件,然而现在很多舆论对perl和cgi评价非常不好,然而这些都是非常不负责任的评价,对这个行业带来了很大的损失,严重减慢了perl在国内发展的速度。而perlscript 是perl语言中的脚本语言,并非perl脚本,也就是说它我们常说的perl是不同的,它是perl的一个脚本语言。类似于vb,大家知道vb有vbscript,perlscript 就好像vbscript,也可以说是vbscript同类,理解这一点就好理解以下的内容。大家知道vbscript分为客户端、服务器端,客户端可以在浏览器(诸如:internet explorer、netscape)中应用,很多网站就用vbscript 做一些客户端的分析处理工作;服务器端就是大家经常在asp里面写的vbscript一样"<%@ language="vbscript" %>"。perlscript 是perl的一个子集,perl->perlscript。 

perlscript 在实际应用中有很多地方与平时写的perl程序是不一样的,比如我们一般显示输出信息都用"print 'info\n\n';",而在使用perlscript的时候就不能使用这样的语法,否则将会造成语法无法识别;perlscript 在默写方面使用的是面向对象技术为基础。所以如果想输出信息,必须采取对象方法:"$response->write("info");"。 

如何在动态服务页中(asp)应用perlscript 作为编写脚本呢?平时我们写asp的时候都需要声明语言类型,例如我们用vbscript编写asp时候,必须胜名"<%@ language="vbscript" %>",在使用perlscript 的时候也是一样,声明格式是一样的"<%@ language=perlscript %>"。现在我们就可以开始写perlscript 的asp了。是不是有些兴奋?我们按照惯例,都要写一个"hello world"脚本啦。其实asp可以不用写的什么脚本的,可以在html直接打出,然而现在这里是为了能够让您更容易的了解perlscript在asp的具体应用。现在我们建立第一个asp页 
<%@language=perlscript%> 
<html> 
<title> perlscript test </title> 
<% 
for($i=0; $i<=10; $i+=2) { 
$response->write(""); 
$response->write("hello world! 
"); 

%> 
</html> 
在这里大家一定要注意 
"$response->write("");"为什么不用print呢?因为print 是对程序而言,是直接的,而asp是间接的输出。在asp里面使用perlscript是自动应用了asp相关模块(use asp;)。这个页内容是进行循环依次输出字的大小。 

访问得到服务器的变量,也不是以前那么样子了,命令是 
"<%= $request->servervariables('server_software')->item() %> " 

我们一般在perl里面则是 
"$env{'server_software'};" 
得到post或者get数据,比以往在perl程序中容易很多。 
post:"$request->form('name')->item()" 
而get: "request->querystring('name')->item()" 

在输出非"text/html"类型数据的时候,首先要使用模块:"win32::ole::variant;",比如输出"image/gif"perl程序方法是: 
print "content-type:image/gif\n\n"; 
而在perlscript中用: 
$response->{contenttype} = "image/gif"; 

输出数据方法则是: 
$response->binarywrite(win32::ole->variant(vt_ui1, $image)); 
取得asp的错误信息: 
"$asperror = $server->getlasterror();" 
设置浏览器cookies:" 
$response->cookies->setproperty( 
'类别', 
'cookies', 
'这是一个cookies' 
); 

设置允许url:" 
$response->cookies('cookie')->{domain} = 'tanshuai.net'; 

设置过期时间:" 
$response->cookies('somecookie')->{expires} = 'january 1, 2001'; 

数据库连接:" 
<% 
#建立连接adobd的对象 

$conn = $server->createobject("adodb.connection"); 

#打开系统 dsn 

$conn->open( "tanshuai" ); 

# 执行 sql 查询 

$rs = $conn->execute( "select * from orders" ); 

#取得目标查询队列数 
$count = $rs->fields->{count}; 

# 输出显示每个队列名 

for ( $i = 0; $i < $count; $i++ ) { 
$response->write( $rs->fields($i)->name ); 
$response->write(" 
"); 
}; 

# 输出所有队列值 

while ( ! $rs->{eof} ) { 
for ( $i = 0; $i < $count; $i++ ) { 
$response->write(" "); 
$response->write($rs->fields($i)->{value}); 
$response->write(" 
"); 
}; 

#移动到下一个纪录 

$rs->movenext(); 
}; 

# 关闭所有对象 

$rs->close(); 
$conn->close(); 
%> 

在perlscript中sub、if、else、else if、for each、while、声明变量、打开文件、字符处理都、调用模块文件都是按照以前的样子。只是在对于web服务器间的特殊处理,需要使用特殊方法。 

另外#在脚本编写的时候仍然是作为注解符号,而且一定要记得每个脚本命令结束后必须要填写";"结束符号。 

通过本文您已经掌握了如何用perl的perl脚本(perlscript)编写asp了。perl的强大功用和广泛的兼容性,是没有任何一个技术可比的。目前perl可嵌入技术包含:c嵌入perl、java 嵌入perl、asp嵌入perl、apache嵌入 perl、wsh嵌入perl、wsc 嵌入perl…… 

perl其实是一个简单易学的通用信息技术语言,我觉得现在普及计算机,首先应该普及的就是perl语言了,perl比basic自然得多。好像人们在说话,它的编写方式就好像我们处理事务一样。学会了perl,不但对你学习其它语言(诸如:c/c++、java)有很大的促进、帮助并加快学习进度,perl的强大发展趋势,可以让您"投机取巧",在其它流行的编程技术中嵌入,这样在您不懂得或是觉得一种算法很麻烦的时候,用perl来帮助你快捷的完成。让您在其它语言中从perl慢慢进化成该种语言,是相当顺利的平稳过渡。我发现在学习perl以后,学习其它语言速度有很大的加快。