perl 入门.docx
- 文档编号:12225418
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:28
- 大小:27.08KB
perl 入门.docx
《perl 入门.docx》由会员分享,可在线阅读,更多相关《perl 入门.docx(28页珍藏版)》请在冰豆网上搜索。
perl入门
perl入门.txt我的人生有A面也有B面,你的人生有S面也有B面。
失败不可怕,关键看是不是成功他妈。
现在的大学生太没素质了!
过来拷毛片,居然用剪切!
有空学风水去,死后占个好墓也算弥补了生前买不起好房的遗憾。
PerlCGI入门2008年02月03日星期日09:
02.1Unix环境
本教程将与您一起学习在Unix平台上用Perl创建CGI。
和其它教程不同,我们并不假设
你了解CGI、Perl或Unix。
学完本教程后,你将能够建立Perl的计数器、留言板和处理安全口令的程序。
同时你也
会对Perl语言有所了解,学习使用其变量、if语句和循环。
什么是CGI?
CGI代表通用网关接口(CommonGatewayInterface)。
本质上,CGI是运行在服务器上
的程序。
它可以用任何语言编写
-只要能够在你的服务器上运行。
Perl之所以能够成为CGI编程的首选,是因为它可以
适应所有的平台,而且拥有很多对Web来说非常理想的工具。
当我在一个网页上填充一个form并按‘Submit‘时,有2件事在服务器上发生:
敲入或选择的所有信息被拷贝到服务器。
服务器寻找在form顶部确定的程序,然后运行之。
程序做的第一件事通常是请求网页form中的内容,然后把它赋给变量。
然后程序可以查
询数据库、发送一封电子邮件或加入留言板、或者任何你想做的事。
我们通过例子学习教程。
对每个新的主题,我们查看整段代码,然后分成小片段并进行
讨论。
在你在Unix服务器上使用Perl之前,应该对Unix有一些了解。
Unix环境
你应该会用Telnet登录到Unix服务器上以便能用Perl创建CGI。
你也应该能把文档FTP到服务器上。
实际上,Unix是一种最强大和灵活的操作系统。
当作为终端使用时,用户用一种称为
X-Windows的图形用户界面。
X-Windows因为在互联网上太慢而无法使用,所以我们将使
用命令行方式。
命令行提示
每次在Unix中输入新的一行,将得到一个命令行提示。
通常以机器名然后跟着一个%或#
字符的形式出现。
这是输入基本命令来创建、拷贝、移动和删除文件的地方,还可以做
其它事情。
试试这些联系:
打开你最喜欢的Mac或PC字处理器。
对于HTML来说,用一种简单的能把代码存成纯文本
的编辑器。
敲入这行:
This
isadummysentenc.
把文件保存为practice.txt。
用FTP程序把这个文件上载到服务器上。
注意:
应该以ASCII的方式上载你的CGI文件,
不能用binary方式。
用TELNET程序访问你的Web服务器。
用你的用户名和口令LOGIN。
敲入ls然后按回车键(注意:
使用小写,Unix区分大小写),你的Web服务器中的内容
将列在屏幕上,应该能够看到你的practice.txt。
敲入pwd然后按回车。
pwd代表“打印工作目录(Print
WorkingDirectory)”。
从服务器的ROOT目录到你的当前目录的路径将显示出来。
例
如,我的主目录是/home/usr/robyoung/htdocs。
敲入mkdirmyfolder然后按回车-创建一个叫‘myfolder‘的目录。
敲入mvpractice.txtmyfolder/practice.txt然后按回车-把practice.txt移动到
myfolder中。
敲入cdmyfolder然后按回车-进入myfolder目录。
敲入pwd然后按回车-路径名以/myfolder结束。
敲入ls然后按回车-myfolder中的内容将显示出来-
只有practice.txt。
敲入cppractice.txtcopy2.txt然后按回车-
做一个拷贝。
敲入ls然后按回车-将列出两个文件。
敲入rmcopy2.txt然后按回车-删除这个文件。
敲入ls然后按回车-只剩下practice.txt。
1.2chmod命令
创建CGI程序时,需要改变其访问权限以便能从网页中执行之。
我们用chmod命令实现这
个目的。
chmod命令有两个参数
-谁拥有权限和他们将拥有哪些权限。
1.谁拥有权限?
有三类不同的权限:
User、Group和Others-用字母u、g和o表示。
字母‘a‘表示所有类
别。
2.可以拥有什么权限?
有3种类型的权限:
Read、Write和eXecute,用字母r、w和x表示。
权限通过等号赋予(=r、或=rw、或=rx),或者通过加号(+r或+rwx)或减号(-w或
-rwx)。
3.如何敲入命令?
对于大多数CGI程序,我想让所有人都有读和执行的权限,但没有写的权限,因此没有
人可以删除或编辑我的程序。
下面是最常见的命令:
chmoda+rxfilename.cgi
表示让所有人有读和执行的权限。
当我创建一个文件时,我拥有完全的读、写和执行权
限,但其他人没有任何权限。
这个命令让所有人可以运行我的程序。
在myfolder文件夹中试试这个例子:
入ls-l然后按回车。
显示出关于practice.txt的很多信息,包括大小、拥有者和最后
保存的日期。
观察访问权限,可能是这样:
rwx------或rw-r--r--或rw-r-----,前3个指明user权限
(读、写、执行)。
然后的三个是group权限(无),最后的三个为other权限(无)。
敲入chmoda+rxpractice.txt然后按回车-
为所有类别增加读和执行权限。
敲入ls-l然后按回车-这时显示的权限为rwxr-xr-x,指明拥有者仍然拥有所有权限,
group和others有读和执行权限,但没有写的权限。
敲入chmodgo-xpractice.txt然后按回车。
敲入ls-l然后回车-现在的权限为rwxr--r--,指明拥有者仍有完全的权限,group和
others只有读的权限。
删除myfolder文件夹
敲入rmpractice.txt然后按回车。
敲入cd..
敲入rmdirmyfolder
1.3定位Perl和sendmail
定位Perl程序
每个Perl程序指明Perl在系统中的位置。
于是外部的网页可以知道执行什么程序和去哪
找它。
从命令行提示符敲入whichperl然后按回车。
系统返回类似这样的结果:
/usr/bin/perl
或
/usr/local/bin/perl
记下这个结果,这是你的系统中Perl的位置,以后会用到。
如果系统没有返回结果,再试试:
敲入whereisperl然后回车。
如果还没有得到Perl的路径,需要给你的系统管理员发一封EMAIL。
定位sendmail程序
敲入whereissendmail,然后按回车。
会返回几个结果,其中一个以sendmail结尾。
例如,我在我的系统上得到的结果是:
sendmail:
/etc/sendmail.cf/etc/sendmail/etc/sendmail.st
/usr/lib/sendmail.no_mx/usr/lib/sendmail.mx/usr/lib/sendmail
/usr/lib/sendmail.hf
/usr/man/man8/send
以/usr/开始sendmail结束的是:
/usr/lib/sendmail,这是我们要记下的。
如果你在定位Perl程序或sendmail程序时遇到问题,应该email给你的系统管理员,询
问正确的路径。
2.1使用Emacs
当我已经有一个很好的PC上的图形界面的面向鼠标的编辑器时,为什么我还想要一个基
于文本的编辑器呢?
答案是Emacs运行在你的Unix平台上,所以可以方便地做小的修改。
基本上当你维护你在Unix平台上的工作时,你有两个选择:
1.在PC上使用图形界面的文本编辑器,然后FTP你的文件到Unix服务器上。
当你做修改
时,保存你的修改,然后再FTP上去。
这种方式的好处是你可以在一个舒适的、面向鼠
标的编辑器中做所有的工作。
缺点是每次上传文件都要花费时间。
2.用一种Unix编辑器,如Emacs,直接保存你的修改到服务器上。
它的界面不太漂亮,
而且不能用鼠标,但一旦你用惯了,就能做任何事。
我宁愿在做小的修改时使用Emacs,
而不愿每次上传文件。
开始Emacs教程:
敲入emacs然后按回车。
屏幕将显示emacs编辑器环境。
如果你的服务器显示“Emacs
notfound”,那么你应该给你的系统管理员发一封Email,问问是否有可用的文本编辑
器并且是否有在线教程。
敲入[ctrl]-h然后按t。
这时将调出教程。
可能要花几个小时学习Emacs教程。
你对
Emacs越了解,编辑Perl越容易。
要点:
保存文件-敲入[ctrl]-x然后按[ctrl]-s。
退出-敲入[ctrl]-x然后按[ctrl]-c。
打开文件-emacsfilename。
2.2Perl简介
2.2Perl简介
准备模板
在你的PC或Mac上建立一个文件夹-perltour。
点击这里下载模板文件-
template.txt。
把它保存到perltour文件夹中。
在你最喜欢的文本编辑器中打开这个文件。
把第一行替换为你已经定位的Perl路径。
对于Windows
NT用户:
删除这行。
你的机器使用.pl文件扩展名开定位Perl,所以要保证你的文件的
扩展名为.pl而不是.cgi。
找到文档的倒数第八行-open(MAIL,
"|/usr/lib/sendmail-t")||die
把/usr/lib/sendmail替换为你已经定位的sendmail路径。
找到下一行-"Content-type:
text/text\n\nCan‘topen
/usr/lib/sendmail!
";
把/usr/lib/sendmail替换为sendmail路径。
保存文件。
从现在开始你每次创建一个新的CGI时都可以拷贝这个template.txt文件。
建立一个测试文件
我们现在建立一个测试用的CGI程序然后上传到服务器上。
注意:
有些服务器允许你的CGI程序可以在任何web目录中
-只要文件名以".cgi"结束。
有的服务器要求只能把它们放在
"cgi-bin"目录中。
可以跟你的系统管理员确认是哪种情况。
拷贝template.txt到test1.cgi中(在NT上为test1.pl)。
打开test1.cgi然后找到#************BEGINBODY*********
在这行后面加入一行:
print"
Hello
World";
保存文件。
如果不需要把脚本放在cgi-bin目录中......
用Telnet程序登录到你的Unix服务器上。
在Unix命令提示符下,敲入mkdirperltour然后按回车。
敲入chmoda+rxperltour然后按回车。
把test1.cgi文件FTP到perltour文件夹中。
注意:
应该以ASCII方式上传你的CGI文件,
不能用binary方式。
敲入chmoda+rxtest1.cgi然后按回车。
敲入ls-l然后按回车。
这时你可以看到test1.cgi的权限:
rwxr-xr-x,表明任何人都
可以读和执行这个文件。
运行浏览器,输入你的主目录URL,把/perltour/test1.cgi加在URL后面。
如果需要把脚本放在cgi-bin文件夹中......
用Telnet登录到你的Unix服务器上。
向系统管理员询问cgi-bin的路径。
在Unix命令提示符下,敲入cdcgi-bin路径,然后按回车。
把test1.cgi文件FTP到服务器的cgi-bin文件夹中。
注意:
应该以ASCII方式上传你的
CGI文件,不能用binary方式。
敲入chmoda+rxtest1.cgi然后按回车。
敲入ls-l然后按回车。
这时你可以看到test1.cgi的权限:
rwxr-xr-x,表明任何人都
可以读和执行这个文件。
运行浏览器,输入你的服务器的URL,把/cgi-bin/test1.cgi加在URL后面。
例如,
HelloWorld将以大字母出现,表明CGI正常工作。
2.3HTMLFORM
2.3HTMLFORM
这页很简单-
建立一个用户可以输入信息的基本的form。
form顶部的
当用户点击form底部的submit按钮时,服务器将执行程序"test2.cgi"并把
用户输入的信息传递给程序。
Method可以是POST或GET。
注意:
如果你的服务器使用cgi-bin文件夹,你的HTML文件中的form中的script名前应
加上/cgi-bin/。
例如,
METHOD="POST"> 3.1回应脚本 3.1回应脚本 这段脚本将显示输入到HTMLFORM中的文本。 它是一个信息如何传递给你的程序的简单 的例子。 既然你现在已经有了一个有着正确的Perl和Senmail的路径的template.txt文 件,下面要做的只是编辑CGI的BODY部分。 拷贝下面脚本的BODY部分到template.txt,然后保存到一个新文件 "test2.cgi"中。 FTPtest2.cgi到perltour文件夹(或cgi-bin)中。 然后在Unix提示符下,进入perltour(或cgi-bin)文件夹,敲入chmod a+rxtest2.cgi设置权限。 现在可以在你的浏览器中打开服务器上的testform.htm,测试这个form。 当你填充这个 form并按"Test It"时,CGI告诉你你输入了什么。 #! /usr/local/bin/perl # &readparse; print"Content-type: text/html\n\n"; # #*****************BEGINBODY************* print"Thankyouforfillingoutthe
form";
$firstname=$value[0];
$lastname=$value[1];
$email=$value[2];
print"Yourfirstnameis$firstname
";
print"Yourlastnameis$lastname
";
print"Youre-mailis$email
";
#***************ENDBODY******************
3.2脚本解释
3.2脚本解释
现在让我们看看这段代码。
#!
/usr/local/bin/perl
#
&readparse;
print"Content-type:
text/html\n\n";
#*****************BEGINBODY*************
Unix上的每个CGI的第一行都是运行它的程序的路径。
记住,你的可能与上面写的不同。
服务器将按这个路径定位Perl,然后用Perl解释器执行程序。
这是唯一的有#并且对程
序有意义的一行。
程序其余部分的#只是注释,程序将忽略其后的内容。
第三行是一个命令,&readparse;。
这是一个子过程,输入所有进入HTML
FORM中的文本。
第四行对所有CGI都是必须的,它告诉服务器我们要打印的任何信息都
应该返回HTML文档。
这些行永远不会改变,因此下面我们集中在BODY部分的内容上。
3.3BODY部分
3.3BODY部分
#*****************BEGINBODY*************
print"
Thankyouforfillingoutthe
form";
$firstname=$value[0];
$lastname=$value[1];
$email=$value[2];
print"Yourfirstnameis$firstname
";
print"Yourlastnameis$lastname
";
print"Youre-mailis$email
";
#***************ENDBODY******************
对于Perl,我们需要知道:
每行以分号结束。
变量以$开始。
第一行很直接-print将打印随后的内容到屏幕上。
要打印的内容必须在引号内,其中
可以包含HTML标记符。
readparse子过程自动把HTMLFORM中的内容放入一个称为value的数组中。
这样,第一
个文本框中的内容是$value[0],第二个文本框中的内容是$value[1],等等
-数组下标以0开始。
第二行我们执行命令:
$firstname=$value[0];
这个语句创建一个称为$firstname的新变量,把$value[0]的内容赋给它。
这意味着在
HTML
FORM中第一个文本框中输入的信息将包含在变量$firstname中。
第三行和第四行与此类似:
$lastname=$value[1];$email=$value[2];
很明显,这两行分别把第二个和第三个文本框中的内容赋给变量$lastname和$email。
程序的最后三行把文本和变量打印到屏幕上。
print"Yourfirstnameis
$firstname
";
print"Yourlastnameis$lastname
";
print"Youre-mailis$email
";
注意变量被包含在双引号中。
在其它语言,如JavaScript中,我们必须显式的连接文本
和变量。
在Perl中,当它看到$时,就会使用变量的内容。
不错,是吧?
但是要注意,
只有双引号才能这样,单引号只是从字面上引用其中的内容。
4.1email子过程
4.1email子过程
#*****************BEGINBODY*************
print"
Thankyouforfillingoutthe
form";
$firstname=$value[0];
$lastname=$value[1];
$email=$value[2];
print"Yourfirstnameis$firstname
";
print"Yourlastnameis$lastname
";
print"Youre-mailis$email
";
$to=$email;
$from="clinton\@whouse.gov";
$sub="subjectofmyfirste-mail";
$body="Theformwasfilledoutby$firstname$lastname
Thankyougoesonanotherline.";
&email($to,$from,$sub,$body);
#***************ENDBODY******************
在上面的例子中,我在程序的BODY后面增加了7行。
你需要拷贝这些行到test2.cgi的
BODY中。
有两种方式:
在PC上的文本编辑器中进行拷贝和粘贴,然后用FTP重新上传,这时不必重新运行chmod。
可以在Unix提示符下运行Emacs或Pico,对文件进行修改,然后保存和退出。
这时你可以再试试form。
要在testform.htm页面中输入你自己的邮件地址。
当你提交这
个form时,显示结果与以前一样。
但如果你在几秒种后查看你的e-mail,你会看到一封
来自President
Clinton的消息。
让我们看看这些行:
$to=$email;
-拷贝变量$email中的内容到变量$to中。
$from="clinton\@whouse.gov";
-设置变量$form为clinton@whouse.gov。
反斜线(\)称为escape
character。
@符号在Perl中有特殊意义,表示一个数组,这时,如果我们不想引用数组,
而只用@符号本身,需要在前面加一个"\"。
例如,如果我敲入下面这行:
$amount="Heowesme$20.00";
将得到一个错误,因为Perl将试图访问一个称为$20.00的变量。
我们可以这样写:
$amount="Heowesme\$20.00";
$sub="subjectofmyfirste-mail";
这行很直接。
$body="Theformwasfilledoutby$firstname
$lastnameThankyougoesonanotherline.";
这只是一个命令-Perl命令总以分号结束。
返回的字符是赋给$body的字符串中的另一
个字符。
这很方便,因为可以敲入引号,然后象在字处理器中一样敲入多行文本,然后
用引号结束。
最后,象其它语句一样敲入引号。
也可以象这样而得到相同的结果:
$body="Theformwasfilledoutby$firstname
$lastname\nThankyougoesonanotherline.";
\n为换行符-当双引号中包含\n时,把它翻
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- perl 入门