避免重新定义已定义函数的 Perl 库

标签 perl module

我有两个 perl 模块文件,例如:

is_date_holiday.pl :

use strict;
use warnings;
sub IsDateHoliday
{
   ...
}
1

calc_prev_working_date_mult.pl :

use strict;
use warnings;
require "is_date_holiday.pl"; # IsDateHoliday
sub CalcPrevWorkingDateMult 
{
   ...
}
1

关于在 perl 文件中同时使用它们,例如:

require "is_date_holiday.pl"; # IsDateHoliday
require "calc_prev_working_date_mult.pl" # CalcPrevWorkingDateMult

它提示我正在重新定义函数 IsDateHoliday

如何做相当于#ifndef 的操作?

最佳答案

你实际上没有modules ,但你应该这样做。

IsDateHoliday.pm:

package IsDateHoliday;

use strict;
use warnings;

use Exporter qw( import );
our @EXPORT_OK = qw( IsDateHoliday );
our %EXPORT_TAGS = ( all => \@EXPORT_OK );

sub IsDateHoliday
{
   ...
}

1;

CalcPrevWorkingDateMult.pm:

package CalcPrevWorkingDateMult;

use strict;
use warnings;

use Exporter qw( import );
our @EXPORT_OK = qw( CalcPrevWorkingDateMult );
our %EXPORT_TAGS = ( all => \@EXPORT_OK );

use IsDateHoliday qw( :all );

sub CalcPrevWorkingDateMult
{
   ...
}

1;

main.pl:

use IsDateHoliday           qw( :all );
use CalcPrevWorkingDateMult qw( :all );

关于避免重新定义已定义函数的 Perl 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7114569/

相关文章:

arrays - 根据匿名哈希数组中的另一个值直接访问值

perl - Catalyst 开发服务器 - 不显示路由和错误

module - 如何获取模块的不同文件的文件路径?

javascript - Angular 模块依赖项的命名约定

css - WebPack 2 嵌套 SCSS

module - 如何将 noConflict 添加到 JS 模块模式?

html - 带有 Template::Toolkit 的当前模板文件名

perl - 我的 Perl 代码如何捕获 Ctrl+D?

模块化方式的 Java Swing + MVC 模式

python - 为什么我们在 Perl 中需要两个相等运算符 ("=="和 "eq")?