首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >隔离Perl脚本中的命名空间

隔离Perl脚本中的命名空间
EN

Stack Overflow用户
提问于 2015-11-12 01:01:45
回答 1查看 123关注 0票数 1

我想在我的script A.pl中使用在script B.pm(我不拥有它)中定义的子例程。因为B.pm中没有package pkg_B;头,所以当我在A.pl中添加use B ();时,所有子例程都会被导入。当我尝试运行A.pl时,这会导致Subroutine redefined警告,因为A.pl有一个与B.pm同名的子例程。有没有一种方法可以在不接触B.pm的情况下将B.pm的命名空间与A.pl隔离(因为还有许多其他脚本明目张胆地使用B.pm的子例程,而不指定作用域)?我唯一的解决方案似乎是重命名我的子例程,我不想这样做。

EN

回答 1

Stack Overflow用户

发布于 2015-11-12 01:37:21

...当我在A.pl中添加use B ();时,所有子例程都会导入

不导入子例程。它们在B.pm文件的名称空间中定义。因为这个文件没有包名,所以名称空间是main,即与A.pl相同的名称空间。因此,在同一名称空间中,存在两个符号与名称名称的冲突。您可以做的是将B.pm包含在它自己的名称空间中,例如

代码语言:javascript
复制
{
     package Foo;
     do 'B.pm';  # defines sub foo
}

sub foo { ... }

foo(); # call local function
Foo::foo(); # call function from B.pm

请注意,这只是一个解决坏代码的坏技巧,你最好修复你的代码。还要注意,您不应该将文件/模块命名为B. is /B,因为已经有一个同名的核心模块。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33655772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档