EDIT:
Краткий обзор каждого модуля. (Я предполагаю, что это правильный способ добавить больше информации к моему сообщению. Приносим свои извинения, поскольку я публикую это впервые)
A.pm - Содержит подпрограммы многократного использования для чтения ZIP-файла, дешифрования содержимого, проверок и т. Д. (Используется различными файлами CGI, сценариями командной строки и другими модулями Perl)
B.pm - это файл Utils, который подключается к БД, ко всем подпрограммам, связанным с SQL, вызывает C.pm для записи меток в каждый файл
C.pm - Специализированная процедура для маркировки каждого файла в ZIP аналогично контрольной сумме (проверка разрешенных типов файлов, чтение файлов, запись файлов, проверка и т. Д.), Использует A.pm, поскольку модуль должен расшифровывать содержимое, выполнить проверки, сделанные A.pm
Включая некоторый пример кода (я просто публикую здесь несколько строк использования; очевидно, многие модули используются в .pm)
A.pm
package A;
use strict;
use warnings;
use B;
..........
B::get_database_information_for_file(..)
..........
sub validate_decrypted_mark { ...... }
sub decrypt_mark {..........}
.....
B.pm
package B;
use strict;
use warnings;
use C;
..........
C::mark_file(..)
..........
sub db_connect { ...... }
sub get_database_information_for_file {..........}
.....
C.pm
package C;
use strict;
use warnings;
use A;
..........
A::decrypt_mark(..)
..........
sub mark_file { ...... }
sub read_mark {..........}
sub write_mark {..........}
sub examine_mark {..........}
.....
Еще немного дополнительной информации (которая может быть полезна)
Эти предупреждения появляются, когда мы недавно перешли с Solaris / Apache на LAMP.
Мы используем mod_perl, поэтому возможно, что модуль уже находится в памяти?
=====
Здравствуйте,
Я искал в переполнении стека и нашел основную причину моей проблемы.
Perl - Подпрограмма переопределена
Но у меня другая ситуация, чем та, которая указана в приведенной выше теме. Моя проблема заключается в том, что я получаю подпрограмму переопределена ошибка в Perl (так же, как тот, который указан в приведенном выше поток). Но мой вопрос касается круговой ссылки и / или лучших практик. У меня следующий сценарий, который приводит к переопределению подпрограммы предупреждение
Пакет A - использует -> Пакет B - использует -> Пакет C - использует -> Пакет A
Поскольку Пакет C использует Пакет A, очевидно, я переопределю предупреждение подпрограммы. Но мой вопрос, это плохая практика программирования, чтобы делать так? Каковы мысли с точки зрения лучших практик?
Я не могу избежать этих ссылок, поскольку Пакет C должен использовать подпрограммы, определенные в Пакете A. У Гранта Маклина было очень хорошее предложение в вышеупомянутой теме для моей ситуации, описанной выше. Я не хотел бы избегать этих предупреждений, поскольку они могут указывать на некоторые проблемы.
Очень ценю ваше время и помощь.
Благодарю вас,