Я уверен, что моя проблема связана с пространствами имен и областью определения, но мне нужна помощь!Переменная/Постоянная в UNIVERSAL?
Я пишу сценарий Perl OO с довольно большим количеством классов и требования к минимизации внешнего использования модуля (не спрашивайте ... Я знаю, я знаю ...)
Итак, Я хочу использовать UNIVERSAL, чтобы предложить метод ведения журнала, который может использовать каждый объект.
Вот очень простой пример, который я только что взломал.
Проблема заключается в $error_log
переменной в пространстве имен UNIVERSAL не кажется, чтобы быть доступными объектами в других классах таким же образом, что методы поголовно.
Ошибки с my $error_log
: Использование неинициализированного значение $ FilePath в открытых на ./test_uni.pl линии 47. Использование неинициализированного значение $ FilePath в конкатенации или строки в ./test_uni.pl строке 47. (.) Невозможно написать: Нет такого файла или каталога на ./test_uni.pl строке 47.
На самом деле, теперь я набираю это, я задаюсь вопросом, будет ли работать закрытие с помощью метода класса в UNIVERSAL.
В то время как я иду и пытаюсь это сделать, есть ли у кого-нибудь предложения для меня, пожалуйста?
Спасибо!
==================== UPDATE ======================
Затвор с помощью метода класса в универсальном, казалось, работали:
package UNIVERSAL;
use POSIX qw(strftime);
use Sys::Hostname;
{
sub ERROR_LOG {
return hostname() . "-" . strftime("%Y-%m-%d_%H.%M", localtime) . ".log";
}
}
И тогда я называю его в UNIVERSAL::_logger
с UNIVERSAL->ERROR_LOG
.
НО! Я хочу, чтобы путь к файлу ERROR_LOG был создан один раз во время выполнения. При этом он будет оценивать его каждый раз ...
Это единственный способ? Как я могу получить доступ к переменным в пакете UNIVERSAL из других источников?
Спасибо!
Спасибо за это! Я думал, что место в файле не имеет значения ... Я проверю это. – wawawawa
Yup. Оно работает. Благодаря! – wawawawa