Perl高级编程:模块的使用

| 暂无评论 | 暂无引用通告

-->

分类:功能型模块 语用型模块

常用的语用型模块有:strict vars warnings
调用模块
调用模块的指令:do require use

do      简单的调用外部文件


do '/home/perl/loadme.pl';

require 两种方法调用:

方法一:
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);

暂无引用通告

发送引用通告网址: http://supersun.info/mt/mt-tb.cgi/540
如果您想引用这篇日记到您的Blog,请复制上面的链接,放置到您发表文章时的相应界面中。

发表评论

最新资源

  • IMG_1437.JPG
  • line.png
  • bar.png
  • perl_calander.jpg

关于此日记

此日记由 supersun 发表于 2007年3月26日 18:02

此Blog上的上一篇日记Perl高级编程:命令行与shell交互

此Blog上的下一篇日记Perl高级开发:cgi.web编程

首页归档页可以看到最新的日记和所有日记。