perl文件包含(do,require,use)指令介绍
发布时间:2023-05-29 04:33:08
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的模块方式;
两者均可。
猜你喜欢
- 用户输入1、使用input来等待用户输入。如 username = input('username:') password
- 本文实例为大家分享了pygame库实现俄罗斯方块小游戏的具体代码,供大家参考,具体内容如下import random,time,pygame
- 一、简介Imageio是一个Python库,提供了一个简单的界面来读取和写入各种图像数据,包括动画图像,视频,体积数据和科学格式。它是跨平台
- 本文为大家分享了MySQL 8.0.29 安装配置方法图文教程,供大家参考,具体内容如下一、安装包下载1、下载地址安装包,按下图所示操作下载
- Java读取数据库表package com.easycrud.builder;import com.easycrud.utils.Prope
- 目录前言示例文件文件编码空值日期错误函数映射方法1:直接使用labmda表达式方法二:使用自定义函数方法三:使用数值字典映射总结前言本文是给
- 本文实例讲述了Python简单实现安全开关文件的两种方式。分享给大家供大家参考,具体如下:以下代码经Python3.3测试。方式1:try:
- 基于Bootstrap jQuery.validate Form表单验证实践项目结构 :github 上源码地址:https://githu
- golang学习第一波,使用http get请求高德天气接口。一、准备内容:1、注册高德开发者账号,申请key 2、golang开发工具Li
- <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> &nbs
- 1. 正则表达式基础1.1. 简单介绍正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个
- 前言:数据的排序是比较常用的操作,DataFrame 的排序分为两种,一种是对索引进行排序,另一种是对值进行排序,接下来就分别介绍一下。1.
- 本文实例为大家分享了python使用Plotly绘图工具绘制柱状图的具体代码,供大家参考,具体内容如下使用Plotly绘制基本的柱状图,需要
- 这是一个网页设计中经常会用到的图片特效,实现多个图片之间的轮换,并分别带有连接。以前的代码只能适用于IE,在FF下始终没有得到很好的解决今天
- 引言这算是一个高级用法了,前面我们只说到对类型、变量的几种反射的用法,包括如何获取其值、其类型、以及如何重新设置新值。但是在项目应用中,另外
- python中index()、find()方法,具体内容如下:index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(
- 本文实例为大家分享了JavaScript实现扫雷小游戏的具体代码,供大家参考,具体内容如下工具:Sublime Text / Dreamwe
- 1.padx表示在x轴方向上的边距一般用法是padx=10,表示距离左右两边组件的长度都为10还可以这么用,padx=(20,10),表示距
- 因为mounted函数只会在html和模板渲染之后会加载一次,但是在子组件中只有第一次的数据显示是正常的,所以需要再增加一个updated函
- 文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说,我们平时看到的修改文件,都是模拟出来的效果,具体的说有两种实现方式。一、方式