Мои perl-настройки немного устарели, поэтому я, вероятно, здесь упускаю что-то действительно очевидное, но я добавил небольшой модуль в некоторый код CGI более старого кода для рефакторинга общих функций.Вот выдержка из модуля с той частью, которая доставляет мне проблемы:
package Common;
use strict;
use warnings;
use base 'Exporter';
our @EXPORT_OK = (&fail_with_error);
sub fail_with_error {
my ($errmsg, $textcolor) = @_;
my $output = printf("<p><font color=\"%s\">ERROR: %s </font>/<p>", $textcolor, $errmsg);
print($output);
exit(1);
}
Когда я выполняю этот модуль напрямую с perl Common.pm
(или когда я просто импортирую функцию в тестовом коде, даже не вызываяэто) то, что я получаю, это ошибка неинициализированного значения для $errmsg
и $textcolor
, например:
$ perl Common.pm
Use of uninitialized value $textcolor in printf at Common2.pm line 10.
Use of uninitialized value $errmsg in printf at Common2.pm line 10.
<p><font color="">ERROR: </font>/<p>1
Казалось бы, perl выдает предупреждение, потому что он выполняет код подпрограммы буквально, ноСущность подпрограммы в том, что она абстрагирована, поэтому разные значения могут быть переданы корректно?Разумеется, их не нужно заполнять, чтобы передавать предупреждения интерпретатора, но, тем не менее, что-то не так.
Я искал вокруг, но эта ошибка очень распространена, потому что в большинстве случаев переменная действительно неинициализирована.Кажется, я не могу найти ничего подходящего для этого типа дела.