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

Perl`use` – import不会被调用两次?

发布时间:2020-12-16 06:08:34 所属栏目:大数据 来源:网络整理
导读:怀疑perl基础知识的使用 它有点类似于我的其他问题Perl: Two packages in same file… 考虑一个perl脚本: Script.pl use INCLUDES; INCLUDES.pm package INCLUDES;use Exporter;############# MY DOUBT STARTS HERE ###############use Module1;use Module2
怀疑perl基础知识的使用

它有点类似于我的其他问题Perl: Two packages in same file…

考虑一个perl脚本:

Script.pl

use INCLUDES;

INCLUDES.pm

package INCLUDES;
use Exporter;

############# MY DOUBT STARTS HERE ###############
use Module1;
use Module2;
##################################################

our @ISA = qw(Exporter);
our @EXPORT = qw();

sub import {

  print 'INCLUDES imported to ' . caller . "n";

}

Module1.pm

package Module1;

use strict;
use Exporter;
use INCLUDES;    #####=> INCLUDES.pm 'use'd

our @ISA = qw(Exporter);
our @EXPORT = qw();

1;

Module2.pm

package Module2;

use strict;
use Exporter;
use INCLUDES;  #####=> INCLUDES.pm 'use'd

our @ISA = qw(Exporter);
our @EXPORT = ();

1;

OUTPUT

D:Do_analysis>Script.pl
INCLUDES imported to main

根据perl文档,使用INCLUDES;在Module1& Module2 => BEGIN {require’INCLUDES.pm’; ‘INCLUDES’ – > import();}.因此,应该在Module1.pm,Module2.pm中调用import().

我希望输出如下所示,

预期输出?

D:Do_analysis>Script.pl
INCLUDES imported to main
INCLUDES imported to Module1
INCLUDES imported to Module2

但为什么执行不如预期?

更新

这是我想通过INCLUDES.pm文件实现的目标.

注意:PACKAGE2可能想要访问PACKAGE3,PACKAGE4等.我不想单独使用PACKAGE2中的所有模块,而是想创建一个库INCLUDES并在所有其他模块中使用它.

这种方法有效吗?还是值得推荐的?

我很欣赏任何有关如何实现这一目标的想法.
谢谢!

解决方法

如果你要搬家

use Module1;
use Module2;

在子导入{…}之下,你会得到预期的行为.

问题是您在编译器甚至在INCLUDES.pm中进行子导入之前执行Module1.pm.

当Module1.pm确实使用INCLUDES;时,Perl说“哦,它已经加载”(响应要求)和“哦,它没有导入”(响应导入),因为INCLUDES.pm的部分那个已创建导入的东西尚未编译.对于Module2.pm也是如此.

一般来说,如果你有一个彼此包含的模块(直接或其他),你做错了(在设计方面),你最终将不得不处理这些问题.您可能会发现Mini-Tutorial: Mutual Use of Exporting Modules在处理这些问题时很有用.

(编辑:李大同)

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

    推荐文章
      热点阅读