perl文件包含(do,require,use)指令介绍

所属分类: 脚本专栏 / perl 阅读数: 910
收藏 0 赞 0 分享

1. do:

1)形式:
do 'filename';
说明:
这里filename需要添加单引号,否则会出错;
filename可以为任何后缀的,甚至没有后缀,不要求是pl或者pm等。

2)关于do的理解:
do 'filename'
首先需要读入filename的文件(如果读入失败,返回undef而且会设置$!变量);
如果读入成功,然后对filename读入的语句进行编译(如果无法编译或者编译错误,会返回undef而且设置错误信息到$@变量);
如果编译也成功,do会执行filename中的语句,最终返回最有一个表达式的值。

简短表达do 'filename'的功能,就是能够将filename中的文字全部加载到当前文件中。

3)理解do的用法:
a. 将文件拆分:
main.pl:

复制代码 代码如下:

use strict;
do 'seperate'; #文件可以以任何后缀命名甚至没有后缀;
seperate:
print "Hello from seperate file! :-)";

b. 可以在seperate中定义函数,然后在当前文件中调用:
main.pl

复制代码 代码如下:

#!/usr/bin/perl
use strict;
do 'seperate';
show();
seperate:
sub show{
    print "Hello from seperate file! :-)";
}

c. 可以在seperate中定义package,然后在当前文件中调用:
main.pl

复制代码 代码如下:

#!/usr/bin/perl
use strict;
do 'seperate';
Show::show_sentence();
seperate:
package Show;
sub show_sentence(){
    print "Hello from seperate file! :-)";
}
1;
__END__
#都不需要文

件名必须与package的名称相同,而且seperate都不需要pm后缀。

从上面的例子,很容易得到,使用do可以方便地实现文件包含。
更多参看http://perldoc.perl.org/functions/do.html

2. require
参看http://perldoc.perl.org/functions/require.html
1)形式:
require 'filename';
require "filename";
这两种相同,而且和do的使用方法都类似;

require Module;
如果不加单引号或者双引号的话,后面的Module将被解析为Perl的模块即.pm文件,然后根据@INC Array中搜索Module.pm文件。首先在当前目录下搜索Module.pm的文件(用户自定义的),如果找不到再去Perl的 (@INC contains: C:/Perl/site/lib C:/Perl/lib .)寻找。
如果Module中出现::,如require Foo::Bar; 则会被替换为Foo/Bar.pm

2)关于require使用的解释:
如果使用require 'filename'或者require "filename"来包含文件的话,使用方法和do完全近似;
如果使用require Module的话,则需要定义Module.pm的文件而且文件中的package要以Module来命名该模块。
main.pl

复制代码 代码如下:

#!C:\perl\bin\inperl -w
use strict;
require Show;
Show::show_header();

Show.pm
#Show.pm

复制代码 代码如下:

package Show;
sub show_header(){
    print "This is the header!  ";   
    return 0;
}
sub show_footer(){
    print "This is the footer!  ";   
    return 0;
}
1;
__END__

3. use
参看http://perldoc.perl.org/functions/use.html
1)形式:
use Module;
use只能够使用模块,而且和require的用法相似,需要Module.pm的文件,而且文件中的package需要已Module来命名该模块。

main.pl

复制代码 代码如下:

#!C:\perl\bin\perl -w
use strict;
use Show;
Show::show_header();

Show.pm

复制代码 代码如下:

#Show.pm
package Show;
sub show_header(){
    print "This is the header!  ";   
    return 0;
}
sub show_footer(){
    print "This is the footer!  ";   
    return 0;
}
1;
__END__

2)require和use的区别:
require:
do the things at run time; (运行时加载)
use:
do the things at compile time; (编译时加载)

4. perlmod - Perl modules (packages)
参考http://perldoc.perl.org/perlmod.html
1)  示例:

复制代码 代码如下:

#Show.pm
package Show;
sub show_header(){
    print "This is the header! /n";  
    return 0;
}
sub show_footer(){
    print "This is the footer! /n";  
    return 0;
}
1;
__END__

2)
一般文件名需要和package名称相同,这里为Show;
可以定义变量和函数;
不要忘记1;
以及最后的__END__

3)
在别的文件中,使用require或者use使用模块的时候:

复制代码 代码如下:

use Show;
#require Show;
Show::show_header();

5. Perl的函数定义及调用:
 

复制代码 代码如下:

sub fun_name(){
 #...
}

1) 如果定义在使用之前,在使用的时候直接fun_name();即可
2)如果定义在使用之后,之前使用的时候需要使用&fun_name();来调用函数。

6.
小结:
综上,文件包含可以提高代码的复用性,在Perl是实现文件包含可以才去两条路:
1)使用do或者require(带引号的)那种方式;
2)使用require Module或者use Module的模块方式;
两者均可。

更多精彩内容其他人还在看

使用 use re debug 查看正则表达式的匹配过程

使用 use re 'debug' 查看正则表达式的匹配过程,参见如下的代码
收藏 0 赞 0 分享

perl中的$a和$b介绍

有关perl中的$a和$b,这两个变量是为sort函数准备的内置变量,所以声明时可以不加 my
收藏 0 赞 0 分享

perl用{}修饰变量名的写法分享

在perl中用{}修饰变量名,可以防止 _ 被解释为变量名的一部分
收藏 0 赞 0 分享

Perl使用File::Basename获取文件扩展名的代码

本文为大家介绍的这个例子,实现了获取/home/topgkw中所有文件后缀,其中目录返回空值
收藏 0 赞 0 分享

Perl 哈希Hash用法之入门教程

本文和大家重点讨论一下Perl Hash的用法,哈希是一种数据结构,和数组类似,但是,和数组不同的是,其索引不是数字,而是名字。也就是说,索引(这里,我们将它叫key)不是数字而是任意的唯一的字符串
收藏 0 赞 0 分享

perl哈希的一个实例分析

上一篇文章介绍了hash的入门教程,这篇文章为大家提供一个实例,方便大家深入学习
收藏 0 赞 0 分享

Perl哈希表用法解析

Perl语言有很多值得学习的地方,那么你对Perl哈希表的概念是否熟悉呢,这里和大家分享一下,希望本文的介绍能让你有所收获
收藏 0 赞 0 分享

Perl 哈希的创建和引用介绍

创建,引用仅有两种方法,使用它也是两种,这里简单介绍下, 方便需要的朋友
收藏 0 赞 0 分享

Perl 函数集小结

perl中常用的函数集合,特分享下,方便需要的朋友
收藏 0 赞 0 分享

perl的POD权限问题处理

今天我们继续查找mod_perl对req_header的处理,有需要的朋友建议参考学习之
收藏 0 赞 0 分享
查看更多