如何处理 Perl 中子程序重定义错误

问题描述 投票:0回答:4

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

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

use strict;
use POSIX;

...

sub remove {
  ...
}
...

我得到一个错误,说子例程

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

perl warnings subroutine
4个回答
27
投票

抑制此警告的另一种方法是将子例程重新定义放在

no warnings 'redefine'
块中:

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

22
投票

这样做:

use POSIX ();

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

POSIX::remove(filename)

用于 POSIX 删除功能。


19
投票

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

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

use strict;
use POSIX '!remove';

...

sub remove {
  ...
}
...

-1
投票

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

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

no warnings 'redefine';

sub XYZ{
  ...
  ...
}

它对我有用!

© www.soinside.com 2019 - 2024. All rights reserved.