Из всего, что я читал об использовании модулей Perl, основное использование:
- Файл модуля с расширением
.pm
, который включает оператор package <name>
, где <name>
- имя файла модуля без расширения.
- Файл кода, в котором используется модуль, содержит оператор
use <name>;
.
Приложение, которое я кодирую, имеет один сценарий основного кода, который использует около 5 модулей. Я забыл включить оператор package <name>
в модули, но мой код по-прежнему прекрасно работал с оператором use <name>
. Я начал получать Undefined subroutine
ошибок с одним из модулей, поэтому я добавил инструкцию package для каждого из модулей. Теперь остальные модули перестали работать . Что дает?
* ** 1019 1020 * Пример: * ** 1022 тысячу двадцать одна *
mainapp.pl
#!/usr/bin/perl
use UtyDate;
my $rowDate = CurrentDate("YYYYMMDD");
UtyDate.pm
#!/usr/bin/perl
package UtyDate;
sub CurrentDate
{
#logic
}
return 1;
Когда я запускаю приведенный выше код, я получаю ошибку Undefined subroutine &main::CurrentDate called at...
. Однако, если я удаляю строку package UtyDate;
из UtyDate.pm, я не получаю ошибки. Такая ситуация существует для нескольких, но не для всех моих модулей.
Очевидно, что я не показываю намного больше кода, но я запутался, как любой код, который я не показываю, может повлиять на конструкции пакета / использования, которые я здесь показал.