设为首页 收藏本站
查看: 942|回复: 0

[经验分享] Perl中的文件包含(do, require, use) | 如何编写Perl模块

[复制链接]

尚未签到

发表于 2017-5-18 12:48:19 | 显示全部楼层 |阅读模式
Perl中的文件包含,有3中方法: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:

DSC0000.gif usestrict;

do'seperate';#文件可以以任何后缀命名甚至没有后缀;



seperate:
print"Hellofromseperatefile!:-)";



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

usestrict;

do'seperate';
show();




seperate:

subshow{
print
"Hellofromseperatefile!:-)";
}



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

usestrict;

do'seperate';
Show
::show_sentence();



seperate:
packageShow;
subshow_sentence(){
print
"Hellofromseperatefile!:-)";
}
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:perlinperl-w
usestrict;

requireShow;

Show
::show_header();


Show.pm
#Show.pm

packageShow;

subshow_header(){
print"Thisistheheader! ";
return0;
}

subshow_footer(){
print"Thisisthefooter! ";
return0;
}

1;

__END__





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

main.pl
#!C:perlinperl-w
usestrict;

use Show;

Show
::show_header();


Show.pm
#Show.pm

packageShow;

subshow_header(){
print"Thisistheheader! ";
return0;
}

subshow_footer(){
print"Thisisthefooter! ";
return0;
}

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的模块方式;
两者均可。

7.
#参考资料:
#http://www.thescripts.com/forum/thread652009.html
#require: http://perldoc.perl.org/functions/require.html
#use: http://perldoc.perl.org/functions/use.html
#do: http://perldoc.perl.org/functions/do.html

#Perl modules (packages and symbol tables):
#http://perldoc.perl.org/perlmod.html

#Advanced: http://search.cpan.org/%7Enwclark/perl-5.8.8/lib/Exporter.pm

#http://www.perlmonks.org/?node_id=533866

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-378812-1-1.html 上篇帖子: [经验总结]Perl输出csv文件 下篇帖子: 用Perl进行数据加工处理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表