2010-08-29 69 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