1

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

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

4

2 回答 2

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
于 2013-03-06T22:53:01.710 回答
0

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

于 2013-03-06T22:50:19.740 回答