PerlScript編寫ASP(轉(zhuǎn)載)
更新時(shí)間:2007年01月14日 00:00:00 作者:
Nighthawk注:
盡管這些年來Perl為廣大編程愛好者所熟悉,但卻對(duì)Perl存在一個(gè)令人尷尬的誤解,以為Perl就是CGI,經(jīng)常有人問我Perl和CGI,和PHP,和ASP比較如何如何,這是實(shí)在是件很遺憾的事情.這里特地貼出下面這篇文摘,也許能減少一些這方面的 誤解.
本文將進(jìn)一步講述Perl在可嵌入技術(shù)的廣域性,和PerlScript 在腳本技術(shù)領(lǐng)域的功用。以前的文章我說了ePerl、Embed Perl和Mod_Perl 技術(shù),它們都是單獨(dú)領(lǐng)域的技術(shù),是在本身基礎(chǔ)上的延伸。而本文將講述如何用PerlScript寫ASP,或者是說在ASP中寫PerlScript。
學(xué)習(xí)本文后,你將會(huì)知道Perl是如何強(qiáng)大,它的兼容性是沒有任何語言可以比的。在目前Web頁編程中,最為盛行的技術(shù):CGI、ASP、PHP、JSP等,其中CGI就包含了Perl、C/C++、JAVA等技術(shù),在CGI 技術(shù)中流行的語言就是Perl,Perl的歷史悠久,有著傳統(tǒng)的編程方式和自然編寫方法,在ASP、PHP、JSP等技術(shù)沒有出現(xiàn)之前,是WEB也編程中最為流行或者說是標(biāo)準(zhǔn)的編程技術(shù)。經(jīng)常有人拿Perl或是CGI與ASP、PHP、JSP等技術(shù)相比,我在這里想重申一次,Perl、CGI與ASP、PHP、JSP不是一個(gè)領(lǐng)域一個(gè)類別,就好比水果和紅薯他們?nèi)绾伪??這些配比方法在小學(xué)中就講述得很詳細(xì)了,所以希望廣大程序技術(shù)人員不要被誤導(dǎo)。Perl是一個(gè)語言,它與C/C++、Java、Basic等是一個(gè)類別的一個(gè)領(lǐng)域的,而ASP(Active Server Page)、PHP(Personal Home Page)、JSP(Java Server Page),大家可以從英文中看出他們后面都有Page,簡單的你可以理解成為超文本語言HTML的服務(wù)器端語言,而真正輸出的HTML是客戶端語言。我編寫CGI,特別是用Perl編寫了幾年的程序,寫了無數(shù)的商業(yè)軟件,然而現(xiàn)在很多輿論對(duì)Perl和CGI評(píng)價(jià)非常不好,然而這些都是非常不負(fù)責(zé)任的評(píng)價(jià),對(duì)這個(gè)行業(yè)帶來了很大的損失,嚴(yán)重減慢了Perl在國內(nèi)發(fā)展的速度。而PerlScript 是Perl語言中的腳本語言,并非Perl腳本,也就是說它我們常說的Perl是不同的,它是Perl的一個(gè)腳本語言。類似于VB,大家知道VB有VBScript,PerlScript 就好像VBScript,也可以說是VBScript同類,理解這一點(diǎn)就好理解以下的內(nèi)容。大家知道VBScript分為客戶端、服務(wù)器端,客戶端可以在瀏覽器(諸如:Internet Explorer、Netscape)中應(yīng)用,很多網(wǎng)站就用VBScript 做一些客戶端的分析處理工作;服務(wù)器端就是大家經(jīng)常在ASP里面寫的VBScript一樣"<%@ LANGUAGE="VBSCRIPT" %>"。PerlScript 是Perl的一個(gè)子集,Perl->PerlScript。
PerlScript 在實(shí)際應(yīng)用中有很多地方與平時(shí)寫的Perl程序是不一樣的,比如我們一般顯示輸出信息都用"print 'info\n\n';",而在使用PerlScript的時(shí)候就不能使用這樣的語法,否則將會(huì)造成語法無法識(shí)別;PerlScript 在默寫方面使用的是面向?qū)ο蠹夹g(shù)為基礎(chǔ)。所以如果想輸出信息,必須采取對(duì)象方法:"$Response->Write("info");"。
如何在動(dòng)態(tài)服務(wù)頁中(ASP)應(yīng)用PerlScript 作為編寫腳本呢?平時(shí)我們寫ASP的時(shí)候都需要聲明語言類型,例如我們用VBScript編寫ASP時(shí)候,必須勝名"<%@ LANGUAGE="VBSCRIPT" %>",在使用PerlScript 的時(shí)候也是一樣,聲明格式是一樣的"<%@ Language=PerlScript %>"?,F(xiàn)在我們就可以開始寫PerlScript 的ASP了。是不是有些興奮?我們按照慣例,都要寫一個(gè)"hello world"腳本啦。其實(shí)ASP可以不用寫的什么腳本的,可以在HTML直接打出,然而現(xiàn)在這里是為了能夠讓您更容易的了解PerlScript在ASP的具體應(yīng)用?,F(xiàn)在我們建立第一個(gè)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呢?因?yàn)閜rint 是對(duì)程序而言,是直接的,而ASP是間接的輸出。在ASP里面使用PerlScript是自動(dòng)應(yīng)用了ASP相關(guān)模塊(use ASP;)。這個(gè)頁內(nèi)容是進(jìn)行循環(huán)依次輸出字的大小。
訪問得到服務(wù)器的變量,也不是以前那么樣子了,命令是
"<%= $Request->ServerVariables('SERVER_SOFTWARE')->Item() %> "
我們一般在Perl里面則是
"$ENV{'SERVER_SOFTWARE'};"
得到POST或者GET數(shù)據(jù),比以往在Perl程序中容易很多。
POST:"$Request->Form('name')->Item()"
而GET: "Request->QueryString('name')->Item()"
在輸出非"text/html"類型數(shù)據(jù)的時(shí)候,首先要使用模塊:"Win32::OLE::Variant;",比如輸出"image/GIF"Perl程序方法是:
print "Content-type:image/GIF\n\n";
而在PerlScript中用:
$Response->{ContentType} = "image/GIF";
輸出數(shù)據(jù)方法則是:
$Response->BinaryWrite(Win32::OLE->Variant(VT_UI1, $image));
取得ASP的錯(cuò)誤信息:
"$ASPError = $Server->GetLastError();"
設(shè)置瀏覽器Cookies:"
$Response->Cookies->SetProperty(
'類別',
'Cookies',
'這是一個(gè)Cookies'
);
"
設(shè)置允許URL:"
$Response->Cookies('Cookie')->{Domain} = 'tanshuai.net';
"
設(shè)置過期時(shí)間:"
$Response->Cookies('someCookie')->{Expires} = 'January 1, 2001';
"
數(shù)據(jù)庫連接:"
<%
#建立連接ADOBD的對(duì)象
#
$Conn = $Server->CreateObject("ADODB.Connection");
#打開系統(tǒng) DSN
#
$Conn->Open( "Tanshuai" );
# 執(zhí)行 SQL 查詢
#
$RS = $Conn->Execute( "SELECT * FROM Orders" );
#取得目標(biāo)查詢隊(duì)列數(shù)
$count = $RS->Fields->{Count};
# 輸出顯示每個(gè)隊(duì)列名
#
for ( $i = 0; $i < $count; $i++ ) {
$Response->Write( $RS->Fields($i)->Name );
$Response->Write("
");
};
# 輸出所有隊(duì)列值
#
while ( ! $RS->{EOF} ) {
for ( $i = 0; $i < $count; $i++ ) {
$Response->Write(" ");
$Response->Write($RS->Fields($i)->{Value});
$Response->Write("
");
};
#移動(dòng)到下一個(gè)紀(jì)錄
#
$RS->MoveNext();
};
# 關(guān)閉所有對(duì)象
#
$RS->Close();
$Conn->Close();
%>
在PerlScript中sub、if、else、else if、for each、while、聲明變量、打開文件、字符處理都、調(diào)用模塊文件都是按照以前的樣子。只是在對(duì)于Web服務(wù)器間的特殊處理,需要使用特殊方法。
另外#在腳本編寫的時(shí)候仍然是作為注解符號(hào),而且一定要記得每個(gè)腳本命令結(jié)束后必須要填寫";"結(jié)束符號(hào)。
通過本文您已經(jīng)掌握了如何用Perl的Perl腳本(PerlScript)編寫ASP了。Perl的強(qiáng)大功用和廣泛的兼容性,是沒有任何一個(gè)技術(shù)可比的。目前Perl可嵌入技術(shù)包含:C嵌入Perl、Java 嵌入Perl、ASP嵌入Perl、Apache嵌入 Perl、WSH嵌入Perl、WSC 嵌入Perl……
Perl其實(shí)是一個(gè)簡單易學(xué)的通用信息技術(shù)語言,我覺得現(xiàn)在普及計(jì)算機(jī),首先應(yīng)該普及的就是Perl語言了,PERL比BASIC自然得多。好像人們在說話,它的編寫方式就好像我們處理事務(wù)一樣。學(xué)會(huì)了Perl,不但對(duì)你學(xué)習(xí)其它語言(諸如:C/C++、JAVA)有很大的促進(jìn)、幫助并加快學(xué)習(xí)進(jìn)度,Perl的強(qiáng)大發(fā)展趨勢,可以讓您"投機(jī)取巧",在其它流行的編程技術(shù)中嵌入,這樣在您不懂得或是覺得一種算法很麻煩的時(shí)候,用Perl來幫助你快捷的完成。讓您在其它語言中從Perl慢慢進(jìn)化成該種語言,是相當(dāng)順利的平穩(wěn)過渡。我發(fā)現(xiàn)在學(xué)習(xí)Perl以后,學(xué)習(xí)其它語言速度有很大的加快。
盡管這些年來Perl為廣大編程愛好者所熟悉,但卻對(duì)Perl存在一個(gè)令人尷尬的誤解,以為Perl就是CGI,經(jīng)常有人問我Perl和CGI,和PHP,和ASP比較如何如何,這是實(shí)在是件很遺憾的事情.這里特地貼出下面這篇文摘,也許能減少一些這方面的 誤解.
本文將進(jìn)一步講述Perl在可嵌入技術(shù)的廣域性,和PerlScript 在腳本技術(shù)領(lǐng)域的功用。以前的文章我說了ePerl、Embed Perl和Mod_Perl 技術(shù),它們都是單獨(dú)領(lǐng)域的技術(shù),是在本身基礎(chǔ)上的延伸。而本文將講述如何用PerlScript寫ASP,或者是說在ASP中寫PerlScript。
學(xué)習(xí)本文后,你將會(huì)知道Perl是如何強(qiáng)大,它的兼容性是沒有任何語言可以比的。在目前Web頁編程中,最為盛行的技術(shù):CGI、ASP、PHP、JSP等,其中CGI就包含了Perl、C/C++、JAVA等技術(shù),在CGI 技術(shù)中流行的語言就是Perl,Perl的歷史悠久,有著傳統(tǒng)的編程方式和自然編寫方法,在ASP、PHP、JSP等技術(shù)沒有出現(xiàn)之前,是WEB也編程中最為流行或者說是標(biāo)準(zhǔn)的編程技術(shù)。經(jīng)常有人拿Perl或是CGI與ASP、PHP、JSP等技術(shù)相比,我在這里想重申一次,Perl、CGI與ASP、PHP、JSP不是一個(gè)領(lǐng)域一個(gè)類別,就好比水果和紅薯他們?nèi)绾伪??這些配比方法在小學(xué)中就講述得很詳細(xì)了,所以希望廣大程序技術(shù)人員不要被誤導(dǎo)。Perl是一個(gè)語言,它與C/C++、Java、Basic等是一個(gè)類別的一個(gè)領(lǐng)域的,而ASP(Active Server Page)、PHP(Personal Home Page)、JSP(Java Server Page),大家可以從英文中看出他們后面都有Page,簡單的你可以理解成為超文本語言HTML的服務(wù)器端語言,而真正輸出的HTML是客戶端語言。我編寫CGI,特別是用Perl編寫了幾年的程序,寫了無數(shù)的商業(yè)軟件,然而現(xiàn)在很多輿論對(duì)Perl和CGI評(píng)價(jià)非常不好,然而這些都是非常不負(fù)責(zé)任的評(píng)價(jià),對(duì)這個(gè)行業(yè)帶來了很大的損失,嚴(yán)重減慢了Perl在國內(nèi)發(fā)展的速度。而PerlScript 是Perl語言中的腳本語言,并非Perl腳本,也就是說它我們常說的Perl是不同的,它是Perl的一個(gè)腳本語言。類似于VB,大家知道VB有VBScript,PerlScript 就好像VBScript,也可以說是VBScript同類,理解這一點(diǎn)就好理解以下的內(nèi)容。大家知道VBScript分為客戶端、服務(wù)器端,客戶端可以在瀏覽器(諸如:Internet Explorer、Netscape)中應(yīng)用,很多網(wǎng)站就用VBScript 做一些客戶端的分析處理工作;服務(wù)器端就是大家經(jīng)常在ASP里面寫的VBScript一樣"<%@ LANGUAGE="VBSCRIPT" %>"。PerlScript 是Perl的一個(gè)子集,Perl->PerlScript。
PerlScript 在實(shí)際應(yīng)用中有很多地方與平時(shí)寫的Perl程序是不一樣的,比如我們一般顯示輸出信息都用"print 'info\n\n';",而在使用PerlScript的時(shí)候就不能使用這樣的語法,否則將會(huì)造成語法無法識(shí)別;PerlScript 在默寫方面使用的是面向?qū)ο蠹夹g(shù)為基礎(chǔ)。所以如果想輸出信息,必須采取對(duì)象方法:"$Response->Write("info");"。
如何在動(dòng)態(tài)服務(wù)頁中(ASP)應(yīng)用PerlScript 作為編寫腳本呢?平時(shí)我們寫ASP的時(shí)候都需要聲明語言類型,例如我們用VBScript編寫ASP時(shí)候,必須勝名"<%@ LANGUAGE="VBSCRIPT" %>",在使用PerlScript 的時(shí)候也是一樣,聲明格式是一樣的"<%@ Language=PerlScript %>"?,F(xiàn)在我們就可以開始寫PerlScript 的ASP了。是不是有些興奮?我們按照慣例,都要寫一個(gè)"hello world"腳本啦。其實(shí)ASP可以不用寫的什么腳本的,可以在HTML直接打出,然而現(xiàn)在這里是為了能夠讓您更容易的了解PerlScript在ASP的具體應(yīng)用?,F(xiàn)在我們建立第一個(gè)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呢?因?yàn)閜rint 是對(duì)程序而言,是直接的,而ASP是間接的輸出。在ASP里面使用PerlScript是自動(dòng)應(yīng)用了ASP相關(guān)模塊(use ASP;)。這個(gè)頁內(nèi)容是進(jìn)行循環(huán)依次輸出字的大小。
訪問得到服務(wù)器的變量,也不是以前那么樣子了,命令是
"<%= $Request->ServerVariables('SERVER_SOFTWARE')->Item() %> "
我們一般在Perl里面則是
"$ENV{'SERVER_SOFTWARE'};"
得到POST或者GET數(shù)據(jù),比以往在Perl程序中容易很多。
POST:"$Request->Form('name')->Item()"
而GET: "Request->QueryString('name')->Item()"
在輸出非"text/html"類型數(shù)據(jù)的時(shí)候,首先要使用模塊:"Win32::OLE::Variant;",比如輸出"image/GIF"Perl程序方法是:
print "Content-type:image/GIF\n\n";
而在PerlScript中用:
$Response->{ContentType} = "image/GIF";
輸出數(shù)據(jù)方法則是:
$Response->BinaryWrite(Win32::OLE->Variant(VT_UI1, $image));
取得ASP的錯(cuò)誤信息:
"$ASPError = $Server->GetLastError();"
設(shè)置瀏覽器Cookies:"
$Response->Cookies->SetProperty(
'類別',
'Cookies',
'這是一個(gè)Cookies'
);
"
設(shè)置允許URL:"
$Response->Cookies('Cookie')->{Domain} = 'tanshuai.net';
"
設(shè)置過期時(shí)間:"
$Response->Cookies('someCookie')->{Expires} = 'January 1, 2001';
"
數(shù)據(jù)庫連接:"
<%
#建立連接ADOBD的對(duì)象
#
$Conn = $Server->CreateObject("ADODB.Connection");
#打開系統(tǒng) DSN
#
$Conn->Open( "Tanshuai" );
# 執(zhí)行 SQL 查詢
#
$RS = $Conn->Execute( "SELECT * FROM Orders" );
#取得目標(biāo)查詢隊(duì)列數(shù)
$count = $RS->Fields->{Count};
# 輸出顯示每個(gè)隊(duì)列名
#
for ( $i = 0; $i < $count; $i++ ) {
$Response->Write( $RS->Fields($i)->Name );
$Response->Write("
");
};
# 輸出所有隊(duì)列值
#
while ( ! $RS->{EOF} ) {
for ( $i = 0; $i < $count; $i++ ) {
$Response->Write(" ");
$Response->Write($RS->Fields($i)->{Value});
$Response->Write("
");
};
#移動(dòng)到下一個(gè)紀(jì)錄
#
$RS->MoveNext();
};
# 關(guān)閉所有對(duì)象
#
$RS->Close();
$Conn->Close();
%>
在PerlScript中sub、if、else、else if、for each、while、聲明變量、打開文件、字符處理都、調(diào)用模塊文件都是按照以前的樣子。只是在對(duì)于Web服務(wù)器間的特殊處理,需要使用特殊方法。
另外#在腳本編寫的時(shí)候仍然是作為注解符號(hào),而且一定要記得每個(gè)腳本命令結(jié)束后必須要填寫";"結(jié)束符號(hào)。
通過本文您已經(jīng)掌握了如何用Perl的Perl腳本(PerlScript)編寫ASP了。Perl的強(qiáng)大功用和廣泛的兼容性,是沒有任何一個(gè)技術(shù)可比的。目前Perl可嵌入技術(shù)包含:C嵌入Perl、Java 嵌入Perl、ASP嵌入Perl、Apache嵌入 Perl、WSH嵌入Perl、WSC 嵌入Perl……
Perl其實(shí)是一個(gè)簡單易學(xué)的通用信息技術(shù)語言,我覺得現(xiàn)在普及計(jì)算機(jī),首先應(yīng)該普及的就是Perl語言了,PERL比BASIC自然得多。好像人們在說話,它的編寫方式就好像我們處理事務(wù)一樣。學(xué)會(huì)了Perl,不但對(duì)你學(xué)習(xí)其它語言(諸如:C/C++、JAVA)有很大的促進(jìn)、幫助并加快學(xué)習(xí)進(jìn)度,Perl的強(qiáng)大發(fā)展趨勢,可以讓您"投機(jī)取巧",在其它流行的編程技術(shù)中嵌入,這樣在您不懂得或是覺得一種算法很麻煩的時(shí)候,用Perl來幫助你快捷的完成。讓您在其它語言中從Perl慢慢進(jìn)化成該種語言,是相當(dāng)順利的平穩(wěn)過渡。我發(fā)現(xiàn)在學(xué)習(xí)Perl以后,學(xué)習(xí)其它語言速度有很大的加快。
相關(guān)文章
如何使用ASP設(shè)置指定站點(diǎn)CPU最大使用程度
如何使用ASP設(shè)置指定站點(diǎn)CPU最大使用程度...2007-01-01Ajax+ASP和Flash+ASP數(shù)據(jù)讀取取方法有些相似的實(shí)現(xiàn)方法
Ajax+ASP和Flash+ASP數(shù)據(jù)讀取取方法有些相似的實(shí)現(xiàn)方法...2007-02-02可以應(yīng)用到馬克斯電影站生成Rss Feed的代碼
前段時(shí)間為了給本人的電影站增加Rss訂閱功能,動(dòng)手寫了個(gè)動(dòng)態(tài)生成Rss Feed的ASP代碼,沒法上傳附件,就直接貼代碼吧,反正也不長,用馬克斯做電影站的朋友直接拿去用吧,其它類型的站點(diǎn)修改一下也能用。生成的Rss Feed采用UTF-8編碼,經(jīng)過feedvalidator.org校驗(yàn),兼容Rss 2.0和Atom。2008-03-03推薦的用Asp實(shí)現(xiàn)屏蔽IP地址訪問的代碼
推薦的用Asp實(shí)現(xiàn)屏蔽IP地址訪問的代碼...2007-08-08ASP 快速執(zhí)行動(dòng)態(tài)網(wǎng)頁
ASP 能快速執(zhí)行你的動(dòng)態(tài)網(wǎng)頁,但你還可以通過緊縮代碼和數(shù)據(jù)庫連接以使它們執(zhí)行更快。2009-01-01