| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 编程开发 > Perl教程 > 文章正文 用户登录
各种漂亮的鼠标UR
去除头部banner
修改新浪博客上面
Google AdSenser 
Skype为推广员提供
Dotworlds免费提供
Better fonts免费
TinyURL免费缩短网
RealTracker提供免
谁杀死了站长(We

Perl CGI 程式写作常问问题集(2) Modules (模组)           

Perl CGI 程式写作常问问题集(2) Modules (模组)

作者:佚名 来源:不详 更新:2006-8-25 21:05:35 错误报告 我要投稿
2.0 - Modules (模组)

--------------------------------------------------------------------------------

Q2.1: 我是不是该用 Perl CGI modules* 来写 CGI scripts ?自己做不是比较容易吗?
【译者】 CGI modules 在此指 CGI.pm 及其他 CGI::* 的模组;详见 Q2.4 。 

这完全取决於您要做的是什麽。CGI modules 较适合重量级的 CGI scripts 。如 果是简单的 scripts 的话,自己做或者是用 CGI Lite 这个模组会简便许多。如 果您真的愿意,您甚至可以用旧的 Perl4 cgi-lib.pl 这个 library*。 

【译注】 作者 Tom C. 之所以这麽说是因为他基本上不赞成使用cgi-lib.pl ,有 兴趣的读者可以看他写的 Why I am not fond of cgi-lib.pl (为什麽我不欣赏 cgi-lib.pl )。 


--------------------------------------------------------------------------------

Q2.2: 如何知道某个 module 该怎麽个用法?
大多数 modules 的使用说明是直接嵌在 程式里的*。 如果是这样的话,您可以用 pod2man 这个 script 来阅读使用指南: 

% pod2text name_of_module.pm 
% pod2man name_of_module.pm | nroff -man | more 

【译注】如果您在 *.pm 档中看到 ``=head1''、``=cut'' 这类的东西便是显示使 用说明有附在里头。这是 Larry Wall 设计的 POD (Plain Old Document) 格式。 详见 perlpod manpages。 


--------------------------------------------------------------------------------

Q2.3: 有哪些 Perl4 的 CGI 或 WWW的 libraries ?
最广为使用的 Perl4 CGI library 是 Steve Brenner 的 cgi-lib.pl。 



--------------------------------------------------------------------------------

Q2.4: 有哪些给 Perl5 使用的 CGI modules?我该用哪个?为什麽?
CGI.pm* 
这个很棒的 module 在功能上和部分 CGI::* modules 相重叠。如果您不想和多重 modules 打交道的话,您可以只用这一个。我们等一下在後头会给您看一个用 CGI.pm 来替 CGI scripts 除错的实例。 
此外,Lincoln (Lincoln Stein;CGI.pm 的作者)还写了一本讨论 Web 和 CGI 非常好的书,叫 How To Set Up and Maintain a World Wide Web Site。 

【译者】 建议读者多使用 CGI.pm 。CGI::* 已经有很长一段时间没有更新了,而 CGI.pm 则不断的有改良的新版推出,并已加入对 FastCGI 的支援,因此对 FastCGI 的使用 者也相当方便。此外,mod_perl (Apache 的 perl module)中所附的 CGI::XA,也是由 CGI.pm 改进而来的。 CGI.pm 让使用者免除自己做低阶资料处理 (如印 HTTP 标头、替 form, cookies 资料解码等)的麻烦。 

CGI::* 模组套件 
这些模组原先大多是由 Tim Bunce 所写,现在则由 Lincoln Stein 来负责 维护。它们的功能包括了帮您产生及处理 form ,替 CGI 程式除错,以及在不同的 forms 之间维系一个状态值。 
CGI Lite 
这个轻量级的 module 是 CGI::* modules 之外的另一个选择。它可算是在老旧的 cgi-lib.pl 之上改良、加料後的产物。 
以上叁者均有能力处理 multipart form 资料(即上传)。 


--------------------------------------------------------------------------------

Q2.5: 为什麽这麽多 perl CGI libraries 都是 object-oriented (物件导向)的?我对用物件导向来写程式一窍不通。难道就没有简单一点,给不会物件导向的人使用的 libraries 吗?物件导向有多难?
其实使用物件导向的 modules 并不难。先去看看 Tom Christiansen 的 Easy Intro to Using Perl Objects (简单介绍如何使用 Perl 物件)吧。 

前头提到的 CGI modules 用起来真的是很容易!这里有一个用 CGI Lite 印出 form 资料的实例*: 

【译者】CGI.pm 的使用说明中有更多范例可供参考。 

#!/usr/local/bin/perl -w

use CGI_Lite;

$cgi = new CGI_Lite;
%data = $cgi->parse_form_data;

print "Content-type: text/plain", "\n\n";

foreach $key (keys %data) {
    print $key, " = ", $data{$key}, "\n";
}

exit 0;

要注意的是,即使您机器上的 Perl 不是您装的(您不是系统管理者),或是您权限不 够无法将这些 modules 和其他的 Perl library 档案安装在同一个地方,您还 是可以使用这些 modules 的 -- 只要将它们摆在一个自己方便的地方,然後在 您的 script 开始处加上*: 

BEGIN {
    unshift @INC, "/your/dir/favorite/place";
}

【译者】建议改用较新的方式: 

use lib qw(/your/dir/favorite/place);

好。以下是一个用到 CGI::* modules 的例子: 

#!/usr/local/bin/perl -w

use CGI::Form;

$cgi_form = new CGI::Form;

print <<'End_of_Header';
    
    
    
    

看着我做!


End_of_Header

print $form->startform;

## 产生一个单行输入栏位 (text field)

print '姓名: ';
print $form->textfield('name'), "
\n";

## 产生一组单选按纽 (radio buttons)

print '

您住哪儿: 
';
print $form->radio_group(-name      => 'where',
                         -values    => ['北美洲',
                                        '南美洲',
                                        '欧洲',
                                        '澳洲',
                                        '亚洲',
                                        '南极洲'],
                         -default   => '北美洲',
                         -linebreak => 'true');

## 产生一个多行输入栏位 (textarea)

print '意见: ';
print $form->textarea('comments', undef, 5, 40);

print "

";
print $form->reset;
print $form->defaults;
print $form->submit('送出!', 'Submit');
print $form->endform;

print "";

reset、defaults,及submit叁种方法( methods ) 会产 生不同的类型的按钮。reset 这个按钮让您把目前 form 栏位中所填的资料洗掉, 并显示属於上一个状态(或回合)的资料。 defaults 这个按钮则是将form 栏位 资料彻底洗去。还有 submit 这个方法产生一个送出钮以便让人将资料送至 server 处。 

您看,不是很容易吗? 

文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。