2013-03-06 59 views
1

在解析@INC路徑中的模塊時,Perl如何解決子程序命名衝突?Perl子程序命名衝突

我正在寫一個Perl模塊,我不希望我的子例程名稱與已經存在的任何內容發生衝突。

回答

0

使用包在模塊中構建單獨的名稱空間,因此可以避免此類問題。包語句將編譯單元聲明爲在給定的名稱空間中。 This link可能會幫助你。

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