Perl子例程命名冲突

时间:2013-03-06 22:41:17

标签: perl

在解析@INC路径中的模块时,Perl如何解决子例程命名冲突?

我正在编写一个Perl模块,我不希望我的子例程名称与已存在的任何内容冲突。

2 个答案:

答案 0 :(得分:2)

这应该在这里阐明一些。

测试脚本

#!/usr/bin/perl

use warnings;
use strict;

# import 'print_stuff' from TestPackage
# so you can call this sub without package name
use TestPackage qw(print_stuff);

my $string = "whatever";
TestPackage::print_stuff($string);
print_stuff($string);

sub print_stuff {
    my $str = shift;

    print "test.pl: $str\n";
}

测试包

package TestPackage;
# Export subs, which will enable you to call these
# subs without package name(TestPackage)
require Exporter;
@ISA = qw(Exporter);
@EXPORT_OK = qw(print_stuff);

sub print_stuff {
    my $str = shift;

    print "TestPackage: $str\n";
}   
1;

输出:

$ test.pl
TestPackage: whatever
test.pl: whatever

答案 1 :(得分:0)

使用package在模块中构建单独的命名空间,这样可以避免这种问题。 package语句将编译单元声明为在给定的命名空间中。 This link可能会对您有所帮助。