Jea*_*ean 1 perl namespaces perl-module require
我想B.pm在我的脚本中使用脚本中定义的子程序(我不拥有)A.pl.由于B.pm没有一个package pkg_B;头在里面,当我添加的所有子程序都是进口use B ();的A.pl.Subroutine redefined当我尝试运行时会出现警告A.pl,因为它A.pl有一个与其中名称相同的子程序B.pm.有没有办法可以B.pm在A.pl不触及的情况下隔离命名空间B.pm(因为有许多其他脚本在B.pm没有指定范围的情况下公然消耗子程序)?我唯一的解决方案似乎是重命名我的子程序,我不想这样做.
...当我添加使用B()时,导入所有子程序; 在A.pl
子程序未导入.它们在B.pm文件的命名空间中定义.由于此文件没有包名称,因此命名空间是主要的,即与A.pl相同的命名空间.因此,您在同一名称空间内存在两个带有名称名称的符号的冲突.你可以做的是在自己的命名空间中包含B.pm,例如
{
package Foo;
do 'B.pm'; # defines sub foo
}
sub foo { ... }
foo(); # call local function
Foo::foo(); # call function from B.pm
Run Code Online (Sandbox Code Playgroud)
请注意,这只是解决错误代码的一个坏方法,您最好修复代码.另请注意,您不应该调用文件/模块B.pm/B,因为已经有一个具有此名称的核心模块.
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |