use加载模块

安装模块后,都会有对应的文档,可以通过perldoc MODULE_NAME来获取模块的使用帮助。

例如:获取File::Utils的使用帮助。

perldoc File::Utils

要在perl程序中使用模块,需要使用use来装载(load)模块。例如,File::Basename模块:

#!/usr/bin/perl

use File::Basename;

一般来说,所有要装载的模块都会写在perl程序的开头,因为use语句是程序编译期间执行的,而且以后要查看、修改程序中使用的模块也方便。当然,这并非必须,可以在任意地方书写use语句。

装载模块后,模块内的属性就会导入到当前程序的名称空间供当前程序使用。例如,File::Basename模块提供的两个子程序是basename()和dirname(),他们分别获取给定文件路径的basename和dirname。

#!/usr/bin/perl
use File::Basename; my $basename = basename( "/usr/bin/perl" );
my $dirname = dirname( "/usr/bin/" );
print "$basename\n$dirname";

或者,只导入给定的函数:

use File::Basename ('basename','dirname');

推荐直接用qw()列表的方式,即使只导入一个函数:

use File::Basename qw(basename dirname);

函数导入到当前名称空间后,模块中的函数可能会和当前程序文件中定义的同名子程序冲突。这时需要指定函数的全名:

my $dirname = File::Basename::dirname( "/usr/bin/" );

如果,导入模块时给出一个空列表,它和不给列表是不一样的。也就是说,下面两种方式是不等价的:

use File::Basename;
use File::Basename ();

前者表示导入模块的默认属性,包括一些默认函数。而后者表示什么都不导入,这时如果要使用这个模块中的函数,只能使用全名。

另外,有些模块比较复杂,函数、属性、方法比较多,一般这时候会提供标签分组功能,其实它们是一堆函数集合。这样可以在导入的时候按照分组标签来导入。常见的一个标签是:all,它表示导入所有属性。

use CGI qw(:all);

如果模块还提供了一个名为tag的标签,那么可以导入这个标签:

use MODULE_NAME qw(:tag);

想要知道模块是否提供了标签,以及提供了哪些标签,可以man MODULE获取。例如,CGI模块的man CGI文档中有一段内容如下:

Here is a list of the function sets you can import:

    :cgi
Import all CGI-handling methods, such as param(), path_info() and the like. :form
Import all fill-out form generating methods, such as textfield(). :html2
Import all methods that generate HTML 2.0 standard elements. :html3
Import all methods that generate HTML 3.0 elements (such as <table>, <super> and <sub>). :html4
Import all methods that generate HTML 4 elements (such as <abbrev>, <acronym> and <thead>). :netscape
Import the <blink>, <fontsize> and <center> tags. :html
Import all HTML-generating shortcuts (i.e. 'html2', 'html3', 'html4' and 'netscape') :standard
Import "standard" features, 'html2', 'html3', 'html4', 'form' and 'cgi'. :all
Import all the available methods.

模块查找路径和@INC

默认情况下,perl将从@INC指定的路径中查找模块,它就像shell的PATH环境变量一样。

以下是@INC的路径:

[root@xuexi ~]# perl -e 'foreach (@INC){print "$_\n"};'
/etc/perl
/usr/local/lib/x86_64-linux-gnu/perl/5.26.1
/usr/local/share/perl/5.26.1
/usr/lib/x86_64-linux-gnu/perl5/5.26
/usr/share/perl5
/usr/lib/x86_64-linux-gnu/perl/5.26
/usr/share/perl/5.26
/usr/local/lib/site_perl
/usr/lib/x86_64-linux-gnu/perl-base

如果我们手动安装的包,或者安装到了一个非默认的查找路径下(例如不同用户安装到了不同家目录下),这时可以通过在shell中设置PERL5LIB环境变量,perl会临时从这个环境变量中去查找模块。

[root@xuexi ~]# export PERL5LIB="/home/fairy/myperl"

或者,在perl命令行中使用-I选项,显式指定待运行程序的模块查找路径。

[root@xuexi ~]# perl -I/home/fairy/myperl PERL_PROGRAM

还有几种更复杂的方法:

  • (1).在perl程序中,在use引用模块之前,使用BEGIN {unshift @INC,"/home/fairy/myperl"};语句,使得@INC在编译期间就加上指定的查找目录
  • (2).在perl程序中,在use引用模块之前,使用use lib "/home/fairy/myperl";指定lib查找路径

由于这些方法都不方便,所以,直接设置PERL5LIB环境变量,或者设置local::lib即可。

Perl使用模块和@INC的更多相关文章

  1. Perl 多线程模块 Parallel::ForkManager

    Perl 多线程模块 Parallel::ForkManager 一个简单的并行处理模块.这个是用来对付循环的多线程处理. 放在循环前面. Table of Contents 1 Synops内容简介 ...

  2. perl json模块

    JSON - JSON (JavaScript Object Notation) encoder/decoder 简介: use JSON; # imports encode_json, decode ...

  3. 查看perl及其模块

    Perl本身自带了很丰富的文档,如果把它们都打印出来,恐怕要耗费大量纸墨.我们试图清点过,但数到2000页左右的时候就数不清了(不用担心,我们用虚拟打印机计算页面数量,这样不会对树木造成威胁,挺环保的 ...

  4. perl EXPORT模块

    Exporter - Implements default import method for modules 实现模块的默认导出方法: 简介: [tomcat@wx03 ~]$ cat hui.pm ...

  5. 和TransDecoder 学习perl 自定义模块的路径问题

    TransDecoder 软件是用perl 原因写的,其中包含了一些自定义的模块,通过一个脚本来进行调用,为了能够正常访问自定义的perl 模块, 在其源代码中利用了FindBin 这个模块 use ...

  6. 使用cpanm安装perl相关模块

    cpanm是安装Perl模块的最方便的方法.自动下载安装依赖包.使用CPAN shell或下载源码包安装模块,遇到大量依赖关系,非常头痛.下面就是一例: 1. 安装cpanmcpanm其实是一个可执行 ...

  7. windows 下安装perl Tk 模块

    首先,安装activeperl ,安装过程中勾选自动添加PATH环境变量,这样安装后就不需要自己手动修改PATH环境变量: 通过cmd 调出命令行窗口,输入ppm ,然后回车,就开启了perl 的包管 ...

  8. 6、perl创建模块(Exporter)及路径 引用 嵌套 查询模块

    参考博客:http://www.cnblogs.com/xudongliang/tag/perl/ 1.perl 模块的创建以及制定perl 模块的路径 (1)创建一个Myfun.pm模块. #/us ...

  9. 操作指定文件格式的10个Perl CPAN模块

    在Perl开发中,非常可能会碰到一些不同格式的文件--XML.PDF.CSV及RSS文件等,和一些不同的二进制数据格式.Perl应用程序须要操作这些文件,对它们进行读写. 此时.能够求助于全面Perl ...

随机推荐

  1. Unity3D InputManager详解

    首先说一下 Input 类,这个类很常用,API 大家基本都知道,这里记录几个使用频率没那么高的 API Input.acceleration:重力加速度传感器的值,加速度的方向,适用于移动平台. I ...

  2. Day06 (黑客成长日记) 初识函数和返回值的作用

    定义函数: 1.初识函数: 我们在学习字符串时,有这样的操作: li = 'tsy be ba bvake ' print(len(li)) 这样可以打印出li的长度,我们利用了python中的len ...

  3. window下载android 最新源码

    https://blog.csdn.net/jason0539/article/details/24010633 2017方法 ok https://www.cnblogs.com/zhangting ...

  4. 利用Python+163邮箱授权码发送带附件的邮件

    背景 前段时间写了个自动爬虫的脚本,定时在阿里云服务器上执行,会从某个网站上爬取链接保存到txt文本中,但是脚本不够完善,我需要爬虫完毕之后通过邮件把附件给我发送过来,之前写过一个<利用Pyth ...

  5. SaaS应用十大关键NFR - 第2部分

    SaaS应用十大关键NFR - 第2部分 在继续上一篇关于SaaS应用的十大关键NFR的博客之后,我们来看看接下来的5个对SaaS解决方案架构产生深刻影响的关键NFR. SaaS应用的关键NFR 多租 ...

  6. Python之路【第一篇】Linux常见命令语句

    查看当前目录:        pwd 查看文件具体大小: ls -l 返回上一级: cd.. 返回根目录:     cd / 创建一个隐藏文件:    vim .test 显示隐藏文件:      l ...

  7. [转]Examining Open vSwitch Traffic Patterns

    In this post, I want to provide some additional insight on how the use of Open vSwitch (OVS) affects ...

  8. Windows 10 IoT Core 17133 for Insider 版本更新

    今天,微软发布了Windows 10 IoT Core 17133 for Insider 版本更新,本次更新只修正了一些Bug,没有发布新的特性.用户可以登录Windows Device Porta ...

  9. Windows下编译安装 FFmpeg

    在Linux/Mac下编译 ffmpeg是非常方便的.但要在 Windows下编译 ffmpeg还真要花点时间.以下就是在 Windowns下编译ffmpeg的步骤: 一.安装Cygwin 在wind ...

  10. Kali学习笔记15:防火墙识别、负载均衡识别、WAF识别

    防火墙简单的识别方式: 如图: 可以简单明了看出:发送SYN不回应,发送ACK回RST可以说明开启过滤等等 基于这个原理,我们可以写一个脚本来对防火墙来探测和识别: #!/usr/bin/python ...