-->
分类:功能型模块 语用型模块
常用的语用型模块有:strict vars warnings调用模块
调用模块的指令:do require use
do 简单的调用外部文件
do '/home/perl/loadme.pl';
require 两种方法调用:
方法一:
require 'getopt.pl';
首先查看%INC得知文件未装入则通过@INC搜索模块位置并装入;
方法二:
require Getopt::Std;
调入模块时将::转换为目录分隔符并搜索@INC获得模块位置.
等价以下代码:
BEGIN {
require Getopt::Std;
Module->import;
}
导入列表
以下方式导入符号(符号包括:子例程名 变量 标记)
use Module ('sub1','sub2','$scalar','@list',':targname');
或
use Module qw(sub1 sub2 $scalar @list :targname);
导入单个符号可用:
use Module 'sub1';
对于不能肯定模块是否支持可以在符号前加":"前缀.
进行缺省导入:
use Module;
进行空列表导入:
use Module();
此处的注意点就是:任何导入都会触发缺省导入.
整个导入机制都是围绕正在被导入的模块中的一个叫做import的子例程.
使用no禁用特性
no Module qw(symbol1 symbol2 :tagname);
此时需要模块支持 此处调用了模块的unimport子例程
上面语句等价于:
BEGIN {
require Module;
unimport qw(symbol1 symbol2 :tagname);
}
use 5.6.0;
require v5.6.0;
这样来要求运行脚本的Perl等于或高于5.6.0;
对于较早的Perl版本可用:
require 5.001;
require 5.005_03;
对于使用的模块有版本要求的可以使用以下语句:
use CGI 2.36 qw(:standard);
注意点:模块名 版本号 导入列表之间并无逗号.
此处的用法不是Perl内部具有的功能性而是简单的调用了VERSION子例程来提取一个数字值
特殊hash变量%INC
%INC的关键字 被请求的模块名转换成的路径名
%INC的值 被装入的实际文件的名字
打印%INC中的内容:
foreach (keys %INC){
print "$INC{$_}\n";
}
打印此数组内容:
perl -e 'foreach(@INC){print "$_\n";}'
向@INC的开头添加目录:
perl -I/home/my/perl/lib
编缉此数组变量:
push @INC,"/root/perl/lab";
use Cwd;
unshift @INC,getcwd();
使用lib编译指示修改@INC
use lib '/root/perl/lab';
从@INC中删除路径:
no lib '/root/perl/lab';
将@INC恢复为Perl的内置部分:
@INC=@lib::ORIG_INC;
定位与脚本相关的库
$Dir $Bin的别名
$Script 脚本的名字
$RealBin实际路径,所有的链接都被分解
$RealDir $RealBin的别名
$RealScript 真正脚本名字 去除了所有的符号链接
使用ExtUtils::Installed模块
如
use ExtUtils::Installed;
$inst=ExtUtils::Installed->new();
print join "\n",$inst->modules();
其他可用的方法有:
directories @dirs=$inst->directories($module)模块的已安装目录列表
directory_tree
files @files=$inst->files($module);模块的已安装的文件列表
packlist
validate
version version(module);模块版本号
例如:
my $lwpversion=$inst->version("LWP");
例如:
use autouse 'Module' => qw(sub1 sub2 module::sub3);
require 'getopt.pl';
首先查看%INC得知文件未装入则通过@INC搜索模块位置并装入;
方法二:
require Getopt::Std;
调入模块时将::转换为目录分隔符并搜索@INC获得模块位置.
use 在编译时计算模块文件执行任何必要的初始化代码并在主体被编译之前修改符号表
use Getopt::Std;等价以下代码:
BEGIN {
require Getopt::Std;
Module->import;
}
导入列表
以下方式导入符号(符号包括:子例程名 变量 标记)
use Module ('sub1','sub2','$scalar','@list',':targname');
或
use Module qw(sub1 sub2 $scalar @list :targname);
导入单个符号可用:
use Module 'sub1';
对于不能肯定模块是否支持可以在符号前加":"前缀.
进行缺省导入:
use Module;
进行空列表导入:
use Module();
此处的注意点就是:任何导入都会触发缺省导入.
整个导入机制都是围绕正在被导入的模块中的一个叫做import的子例程.
使用no禁用特性
no Module qw(symbol1 symbol2 :tagname);
此时需要模块支持 此处调用了模块的unimport子例程
上面语句等价于:
BEGIN {
require Module;
unimport qw(symbol1 symbol2 :tagname);
}
测试模块版本和Perl的版本
require 5.6.0;use 5.6.0;
require v5.6.0;
这样来要求运行脚本的Perl等于或高于5.6.0;
对于较早的Perl版本可用:
require 5.001;
require 5.005_03;
对于使用的模块有版本要求的可以使用以下语句:
use CGI 2.36 qw(:standard);
注意点:模块名 版本号 导入列表之间并无逗号.
此处的用法不是Perl内部具有的功能性而是简单的调用了VERSION子例程来提取一个数字值
特殊hash变量%INC
%INC的关键字 被请求的模块名转换成的路径名
%INC的值 被装入的实际文件的名字
打印%INC中的内容:
foreach (keys %INC){
print "$INC{$_}\n";
}
特殊数组变量@INC
此数组内值为路径名列表打印此数组内容:
perl -e 'foreach(@INC){print "$_\n";}'
向@INC的开头添加目录:
perl -I/home/my/perl/lib
编缉此数组变量:
push @INC,"/root/perl/lab";
use Cwd;
unshift @INC,getcwd();
使用lib编译指示修改@INC
use lib '/root/perl/lab';
从@INC中删除路径:
no lib '/root/perl/lab';
将@INC恢复为Perl的内置部分:
@INC=@lib::ORIG_INC;
定位与脚本相关的库
使用FinBin模块
$Bin 脚本所在目录路径$Dir $Bin的别名
$Script 脚本的名字
$RealBin实际路径,所有的链接都被分解
$RealDir $RealBin的别名
$RealScript 真正脚本名字 去除了所有的符号链接
找出被安装的模块
使用ExtUtils::Installed模块
如
use ExtUtils::Installed;
$inst=ExtUtils::Installed->new();
print join "\n",$inst->modules();
其他可用的方法有:
directories @dirs=$inst->directories($module)模块的已安装目录列表
directory_tree
files @files=$inst->files($module);模块的已安装的文件列表
packlist
validate
version version(module);模块版本号
例如:
my $lwpversion=$inst->version("LWP");
将模块的载入推迟至使用时
目的:当模块很大时可以加快程序的启动而且可以不用加载用不到的特性例如:
use autouse 'Module' => qw(sub1 sub2 module::sub3);

发表评论