加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

包和模块

发布时间:2020-12-16 00:21:37 所属栏目:大数据 来源:网络整理
导读:-- Start require 如果我们有一个 date.pl,其中包含了一些关于日期操作的函数,如下: #!/usr/bin/perlsub getToday {my (undef,undef,$mday,$mon,$year) = localtime(time);return sprintf("%04d%02d%02d",$year + 1900,$mon +1,$mday);}# 必须返回一个布

-- Start

require

如果我们有一个 date.pl,其中包含了一些关于日期操作的函数,如下:

#!/usr/bin/perl

sub getToday {
	my (undef,undef,$mday,$mon,$year) = localtime(time);
	return sprintf("%04d%02d%02d",$year + 1900,$mon +1,$mday);
}

# 必须返回一个布尔型的真值,否则 require 时会报错
return 1;


现在我想在自己的脚本中使用 date.pl 中的函数该怎么办呢?很简单,使用 require 将 date.pl 包含进来就可以了,下面是一个简单的例子。

#!/usr/bin/perl


# Perl 会在内置数组 @INC 指定的目录中寻找文件date.pl
# 如果 @IN C中有多个目录中含有同一个文件,则只有第一个被包含
push(@INC,"D:/Development/Perl");


# 使用 require 将 date.pl 包含到我们的脚本中
require "date.pl";


# 调用 date.pl 中的函数
my $today = &getToday();
print "Today is $todayn";


如果自己的脚本中也有 getToday 函数会发生什么呢?Perl 会忽略自己脚本中的函数,而使用 date.pl 中的函数。这将导致我们无法调用自己定义的函数,那如何避免这种名字冲突呢?答案就是使用包。

我们将上面的例子稍作修改来演示包的使用。

#!/usr/bin/perl

# 用包实现名字空间
# 下面的例子定义了 date 包
# 事实上,任何代码都属于某个包,如果没有显示指定包名,则默认属于 main 包
package date;


sub getToday {
	my (undef,$mday);
}


# 必须返回一个布尔型的真值,否则 require 时会报错
return 1;


?

#!/usr/bin/perl

push(@INC,"D:/Development/Perl");
require "date.pl";


# 调用 date.pl 中的函数,需要指定包名
my $today = &date::getToday();
print "Today is $todayn";


# 调用自定义的同名函数
my $today = &getToday();
print "Today is $todayn";


# 自定的函数
sub getToday {
	my (undef,$year) = localtime(time);
	return sprintf("%04d-%02d-%02d",$mday);
}


模块

如果我们想把 date.pl 发布给其他人使用,我们最好将它定义成一个模块,创建模块非常简单,使用包来创建模块。我们将上面的例子稍作修改来演示如何创建模块。

我们将 date.pl 改名为 date.pm,其他不做任何修改。下面的例子演示如果使用 date.pm 模块。

#!/usr/bin/perl

# 使用模块
use date;


# 调用 date 模块中的函数
my $today = &date::getToday();
print "Today is $todayn";


# 调用自定义的同名函数
my $today = &getToday();
print "Today is $todayn";


# 自定的函数
sub getToday {
	my (undef,$mday);
}


use 和 require 的区别

use 和 require 都可以将模块导入到我们的程序中,它们之间的区别在于,无论 use 处于脚本的何处,它总是在其他语句执行之前执行,而 require 语句执行的时机和它所处的位置有关。

?

-- 更多参见:Perl 精萃

-- 声 明:转载请注明出处 -- Last Updated on 2012-07-07 -- Written by ShangBo on 2012-07-07 -- End

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读