在解析@INC路径中的模块时,Perl如何解决子例程命名冲突?
我正在编写一个Perl模块,我不希望我的子例程名称与已存在的任何内容冲突。
答案 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可能会对您有所帮助。