perl文件包含(do,require,use)指令介绍
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可以方便地实现文件包含。
更多参看
2. require
参看
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)
参考
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的模块方式;
两者均可。
下一篇: 一文详解微服务架构