文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | firefox | WPS | 杀毒软件 | Picasa
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形图像 办公软件 媒体动画 精文荟萃 常用软件 网页编程 技术开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院网络编程CGI/PerlPerl教学 第十四篇 Perl5的包和模块
精品推荐
特别推荐
·在CGI中如何使用cookie的方法
·CGI脚本在WIN2000、WINNT下安装
热点TOP10
·cgic: 为C语言编写CGI的C函数库
·Perl实例:
·在CGI中如何使用cookie的方法
·CGI 安全问题
·怎样一次打印多个文件
·CGI脚本在WIN2000、WINNT下安装
·CGI教程(4)HTML 表单
·cgilib例
·Perl教学 第十二篇 Perl5中的引用之二
·Perl教学 第十二篇 Perl5中的引用之一
·Perl/Tk FAQ - 4. 哪里有Perl/Tk?
·用Perl写出自己的安全工具--初级
·购建ASP、CGI、PHP+MySQL运行环境——服务器运行环境配置全攻略(二)
·跟我学Perl
·访问标准CGI变量
·关于我和刘思平发现的xx(www.xxxxxxx.com)的cgi漏洞
·关于Sendmail和Perl的邮件附件过滤系统
·关于odbc的一个文挡说明
·建立个人服务器脱机调试CGI脚本
·计数器的编写方法

Perl教学 第十四篇 Perl5的包和模块

日期:2007年5月10日 作者: 查看:[大字体 中字体 小字体]


一、require函数
用require函数可以把程序分割成多个文件并创建函数库。例如,在myfile.pl中有定义好的Perl函数,可用语句require ("myfile.pl"); 在程序中包含进来。当Perl解释器看到这一语句,就在内置数组变量@INC指定的目录中寻找文件myfile.pl。如果找到了,该文件中的语句就被执行,否则程序终止并输出错误信息:
Can't find myfile.pl in @INC
作为子程序调用参数,文件中最后一个表达式的值成为返回值,require函数查看其是否为零,若为零则终止。例如myfile.pl最后的语句是:
print ("hello, world!\n");
$var = 0;
因为最后的语句值为零,Perl解释器输出下列错误信息并推出:
myfile.pl did not reture true value
可以用简单变量或数组元素等向require传递参数,如:

@reqlist = ("file1.pl", "file2.pl", "file3.pl");
require ($reqlist[$0]);
require ($reqlist[$1]);
require ($reqlist[$2]);
还可以不指定文件名,即:
require;
这时,变量$_的值即作为文件名传递给require。
注:如果@INC中有多个目录中含有同一个文件,则只有第一个被包含。
1、require函数和子程序库
用require函数可以创建可用于所有Perl程序的子程序库,步骤如下:

a、确定存贮子程序库的目录
b、将子程序抽取放到单独的文件中,将文件放到子程序库目录
c、每个文件末尾加一句非零值的语句,最简单的办法是语句 1;
d、在主程序中用require包含一个或多个所需的文件。
e、运行主程序时,用 -I 选项指定子程序库目录,或者在调用require前将该目录添加到@INC数组中。
例如:假设目录/u/perldir中存有你的Perl子程序库,子程序mysub存贮在文件mysub.pl中。现在来包含上该文件:
unshift (@INC, "/u/perldir");
require ("mysub.pl");
对unshift的调用把目录/u/perldir添加到@INC数组,对require的调用将mysub.pl文件的内容包含进来作为程序的一部分。
注意:

1、应该使用unshift来向@INC中添加目录,而不是push。因为push增加到@INC的末尾,则该目录将被最后搜寻。
2、如果你的库文件名与/usr/local/lib/perl中的某文件同名,则不会被包含进来,因为require只包含同名文件中的第一个。
2、用require指定Perl版本
Perl 5中,可以用require语句来指定程序运行所需的Perl版本。当Perl解释器看到require后跟着数字时,则只有其版本高于或等于该数字时才运行该程序。例如,下面语句表明只有Perl解释器为5.001版或更高时才运行该程序:
require 5.001;
进入讨论组讨论。
二、包
Perl程序把变量和子程序的名称存贮到符号表中,perl的符号表中名字的集合就称为包(package)。
1、包的定义
在一个程序中可以定义多个包,每个包有一个单独的符号表,定义语法为:
package mypack;
此语句定义一个名为mypack的包,从此以后定义的所有变量和子程序的名字都存贮在该包关联的符号表中,直到遇到另一个package语句为止。
每个符号表有其自己的一组变量、子程序名,各组名字是不相关的,因此可以在不同的包中使用相同的变量名,而代表的是不同的变量。如:

$var = 14;
package mypack;
$var = 6;
第一个语句创建变量$var并存贮在main符号表中,第三个语句创建另一个同名变量$var并存贮在mypack包的符号表中。
2、在包间切换
在程序里可以随时在包间来回切换,如:

1: #!/usr/local/bin/perl
2:
3: package pack1;
4: $var = 26;
5: package pack2;
6: $var = 34;
7: package pack1;
8: print ("$var\n");
运行结果如下:

$ program
26
$
第三行定义了包pack1,第四行创建变量$var,存贮在包pack1的符号表中,第五行定义新包pack2,第六行创建另一个变量$var,存贮在包pack2的符号表中。这样就有两个独立的$var,分别存贮在不同的包中。第七行又指定pack1为当前包,因为包pack1已经定义,这样,所有变量和子程序的定义和调用都为该包的符号表中存贮的名字。因此第八行对$var的调用为pack1包中的$var,其值为26。
3、main包
存贮变量和子程序的名字的缺省符号表是与名为main的包相关联的。如果在程序里定义了其它的包,当你想切换回去使用缺省的符号表,可以重新指定main包:
package main;
这样,接下来的程序就好象从没定义过包一样,变量和子程序的名字象通常那样存贮。
4、包的引用
在一个包中可以引用其它包中的变量或子程序,方法是在变量名前面加上包名和一个单引号,如:

package mypack;
$var = 26;
package main;
print ("$mypack'var\n");
这里,$mypack'var为mypack包中的变量$var。
注意:在Perl 5中,包名和变量名用双冒号隔开,即$mypack::var。单引号引用的方式仍然支持,但将来的版本中未必支持。
进入讨论组讨论。
5、指定无当前包
在Perl 5中,可以用如下语句指定无当前包:
package;

[1] [2] [3] 下一页 




上一篇:CGI教程(6)调用CGI脚本文件的例子

下一篇:Perl教学 第十三篇 Perl的面向对象编程

Perl教学 第十四篇 Perl5的包和模块 相关文章:
·Perl教学 第十四篇 Perl5的包和模块
Perl教学 第十四篇 Perl5的包和模块 相关软件:

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:vipcn