2010-08-29 29 views
12

所以我必须在短期有这个问题,一个文件...如何处理子程序重新定义错误在Perl

#!/usr/bin/perl -w 
package Foo; 

use strict; 
use POSIX; 

... 

sub remove { 
    ... 
} 
... 

,我得到一个得到一个错误说子程序remove已经被重新定义。我知道这个问题,在POSIX中有一个叫做remove的子程序。但是,我不知道如何处理它。这个问题通常如何解决?

回答

19

做到这一点:

use POSIX(); 

将停止出口的POSIX模块的所有默认功能。然后,您需要以POSIX ::为前缀所有POSIX方法::如:

POSIX::remove(filename) 

POSIX删除功能。

+0

谢谢。这是传统吗? – floogads 2010-08-29 03:08:43

+1

是的,一般来说,为了避免冲突的子程序定义,最好不要导入任何内容,或者只有那些你确定的子程序才会有唯一的名称。 – ennuikiller 2010-08-29 03:17:32

+5

@floogads,更通常的说'使用POSIX qw(mkfifo modf);'你明确列出你想要导入的所有函数。这样,您不必使用全部的'POSIX ::'前缀,而且您不必担心与程序中的子例程名称发生冲突。 – cjm 2010-08-29 03:48:27

22

另一种方式来禁止这种警告是把你的子程序重新定义一个no warnings 'redefine'块中:“名称”

{ 
    no warnings 'redefine'; 
    sub remove { ... } 
} 
18

可以被正常使用指令出口排除某些符号(见perldoc Exporter)例如:

#!/usr/bin/perl -w 
package Foo; 

use strict; 
use POSIX '!remove'; 

... 

sub remove { 
    ... 
} 
... 
+1

我不知道'!name'指令!整齐! – 2010-08-30 17:50:04

相关问题