Как обрабатывать переопределенные ошибки подпрограммы в Perl - PullRequest
13 голосов
/ 29 августа 2010

Итак, у меня есть файл, который вкратце имеет эту проблему ...

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

use strict;
use POSIX;

...

sub remove {
  ...
}
...

, и я получаю сообщение об ошибке, говоря, что подпрограмма remove была переопределена.Я знаю проблему, в POSIX есть подпрограмма remove.Тем не менее, я не знаю, как справиться с этим.Как обычно решается эта проблема?

Ответы [ 4 ]

22 голосов
/ 29 августа 2010

Другой способ подавить это предупреждение - переопределить подпрограмму внутри блока no warnings 'redefine':

{
    no warnings 'redefine';
    sub remove { ... }
}
20 голосов
/ 29 августа 2010

сделать это:

use POSIX ();

, что остановит экспорт всех функций по умолчанию модуля POSIX.Затем вам нужно будет добавить к POSIX :: все методы POSIX, такие как:

POSIX::remove(filename)

для функции удаления POSIX.

18 голосов
/ 29 августа 2010

Вы можете исключить экспорт определенных символов с помощью директивы! Name (см. perldoc Exporter ), например:

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

use strict;
use POSIX '!remove';

...

sub remove {
  ...
}
...
0 голосов
/ 26 сентября 2018

Подпрограмма XYZ переопределена в строке N [ошибка perl]

Вы можете обернуть свою программу без предупреждений 'redefine' (которая имеет лексическую область):

noпредупреждения 'переопределить';

sub XYZ{

...
...

}

Это сработало для меня!

...