14

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

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

use strict;
use POSIX;

...

sub remove {
  ...
}
...

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

4

4 回答 4

26

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

{
    no warnings 'redefine';
    sub remove { ... }
}
于 2010-08-29T03:30:49.790 回答
21

做这个:

use POSIX ();

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

POSIX::remove(filename)

对于 POSIX 删除功能。

于 2010-08-29T03:02:43.810 回答
19

您可以使用 '!name' 指令(请参阅perldoc Exporter )将某些符号排除在正常导出之外,例如:

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

use strict;
use POSIX '!remove';

...

sub remove {
  ...
}
...
于 2010-08-29T04:37:02.223 回答
-1

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

您可以将您的例程包装在没有警告“重新定义”(这是词法范围)中:

没有警告“重新定义”;

sub XYZ{

...
...

}

它对我有用!

于 2018-09-26T09:52:13.530 回答