如何在Perl中处理子例程重新定义的错误

时间:2010-08-29 02:56:08

标签: perl warnings subroutine

所以我有一个文件,简而言之就是这个问题......

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

use strict;
use POSIX;

...

sub remove {
  ...
}
...

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

4 个答案:

答案 0 :(得分:22)

抑制此警告的另一种方法是将子例程重新定义放在no warnings 'redefine'块中:

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

答案 1 :(得分:20)

这样做:

use POSIX ();

将停止导出POSIX模块的所有默认功能。然后,您需要使用POSIX ::前缀所有POSIX方法,例如:

POSIX::remove(filename)

用于POSIX删除功能。

答案 2 :(得分:18)

您可以使用'!name'指令排除某些符号(请参阅perldoc Exporter),例如:

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

use strict;
use POSIX '!remove';

...

sub remove {
  ...
}
...

答案 3 :(得分:-1)

在第N行重新定义了子例程XYZ [perl错误]

您可以在没有警告“重新定义”(按词法范围)的情况下包装例程:

没有警告“重新定义”;

sub XYZ{

...
...

}

对我有用!