Chinaunix首页 | 论坛 | 博客
  • 博客访问: 858815
  • 博文数量: 253
  • 博客积分: 6891
  • 博客等级: 准将
  • 技术积分: 2502
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-03 11:01
文章分类

全部博文(253)

文章存档

2016年(4)

2013年(3)

2012年(32)

2011年(184)

2010年(30)

分类: Python/Ruby

2011-08-25 14:46:53

一、require函数

用require函数可以把程序分割成多个文件并创建函数库。例如,在myfile.pl中有定义好的Perl函数,可用语句 require("myfile.pl");在程序中Perl包含进来。当Perl解释器看到这一语句,就在内置数组变量@INC指定的目录中寻找文件 myfile.pl。如果找到了,该文件中的语句就被执行,否则程序终止并输出错误信息:
Can'tfindmyfile.plin@INC
作为子程序调用参数,文件中最后一个表达式的值成为返回值,require函数查看其是否为零,若为零则终止。
注:如果@INC中有多个目录中含有同一个文件,则只有第一个被Perl包含。

1、require函数和子程序库

用require函数可以创建可用于所有Perl程序的子程序库,步骤如下:

a、确定存贮子程序库的目录
b、将子程序抽取放到单独的文件中,将文件放到子程序库目录
c、每个文件末尾加一句非零值的语句,最简单的办法是语句1(或return(1));
d、在主程序中用requirePerl包含一个或多个所需的文件。
e、运行主程序时,用-I选项指定子程序库目录,或者在调用require前将该目录添加到@INC数组中。

例如:假设目录/u/perldir中存有你的Perl子程序库,子程序mysub存贮在文件mysub.pl中。现在来Perl包含上该文件:
unshift(@INC,"/u/perldir");
require("mysub.pl");
对unshift的调用把目录/u/perldir添加到@INC数组,对require的调用将mysub.pl文件的内容Perl包含进来作为程序的一部分。

就可以在主程序中调用mysub.pl的所有函数了。

subfunc();

注意:

1、应该使用unshift来向@INC中添加目录,而不是push。因为push增加到@INC的末尾,则该目录将被最后搜寻。
2、如果你的库文件名与/usr/local/lib/perl中的某文件同名,则不会被Perl包含进来,因为require只Perl包含同名文件中的第一个。
2、用require指定Perl版本
Perl5中,可以用require语句来指定程序运行所需的Perl版本。当Perl解释器看到require后跟着数字时,则只有其版本高于或等于该数字时才运行该程序。例如,下面语句表明只有Perl解释器为5.001版或更高时才运行该程序:
require5.001;

二、Perl包
Perl程序把变量和子程序的名称存贮到符号表中,perl的符号表中名字的集合就称为Perl包(package)。
在一个程序中可以定义多个Perl包,每个Perl包有一个单独的符号表,定义语法为:
package mypack;
此语句定义一个名为mypack的Perl包,从此以后定义的所有变量和子程序的名字都存贮在该Perl包关联的符号表中,直到遇到另一个package语句为止。每个符号表有其自己的一组变量、子程序名,各组名字是不相关的,因此可以在不同的Perl包中使用相同的变量名,而代表的是不同的变量。如:
  1. $var = 4;
  2. package mypackage1;
  3. $var = 6;
  4. package mypackage2;
  5. $var = 9;

  6. package mypackage1;
  7. print $var;       后两行可以换成 print $mypackage1::var;

  8. 为 6
三、模块
Perl5中用Perl包来创建模块,方法是创建Perl包并将之存在同名的文件中。例如,名为Mymodule的Perl包存贮在文件 Mymodule.pm中(扩展名.pm表示PerlModule)。下例的模块Mymodule含有子程序func1和func2。
  1. #!/usr/bin/perl
  2. #
  3. package mymodule;

  4. sub func1{
  5.         $myvar1 += 1;
  6. }

  7. sub func2{
  8.         $myvar2 += 2;
  9.         print $myvar2;
  10. }
  11. 1;





阅读(2776) | 评论(0) | 转发(0) |
0

上一篇:RE !~

下一篇:fork

给主人留下些什么吧!~~