Perl`use` – import不会被调用两次?
怀疑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在处理这些问题时很有用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |