Perl 在解析@INC 路径中的模块时如何解决子例程命名冲突?
我正在编写一个 Perl 模块,我不希望我的子例程名称与已经存在的任何内容发生冲突。
这应该在这里有所启发。
测试脚本
#!/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
使用 package 在模块中构建单独的命名空间,这样可以避免此类问题。package 语句将编译单元声明为在给定的命名空间中。此链接可能会对您有所帮助。