Я хотел бы использовать переменную Perl из моего скрипта в файле конфигурации Log :: Log4perl. Я прочитал документацию и обнаружил, что могу использовать подпрограмму, но я хотел бы сделать это немного проще, если это возможно.Как я могу использовать переменную Perl в моем файле конфигурации Log :: Log4perl?
Я хочу, чтобы установить имя файла для моего Appender:
log4perl.appender.av_std_LOGFILE.filename="whateverfilename.log"
Но делать это таким образом, это фиксированное значение.
У меня есть имя файла в переменной в моем сценарии и хотел бы использовать это во время выполнения:
log4perl.appender.av_std_LOGFILE.filename=\
sub { return &av_getLogfileName(); }
Где это подпрограмма:
sub av_getLogfileName
{
return $av_std_LOGFILE;
}
Это работает, но я хотел бы чтобы избежать sub внутри моего скрипта, поскольку возвращаемое значение очень простое.
documentation говорит:
Каждое значение, начиная со строки
sub {...
интерпретируется как код Perl будет выполнен в то время, приложение анализирует конфигурацию ...
Так что я пытался что-то как это, но это не помогло:
log4perl.appender.av_std_LOGFILE.filename=\
sub { print "$av_std_LOGFILE"; }
Есть ли способ получить результат переменной без sub внутри моего скрипта?
Вы сказали, что '$ av_std_LOGFILE' установлен в скрипте пару раз и модуль пару раз. Что он? – ThisSuitIsBlackNot
Кроме того, вы не должны вызывать подпрограммы с '&', если вы не знаете, что это делает. 'return & av_getLogfileName();' должно быть 'return av_getLogfileName();' (или, еще лучше, 'return av_get_logfile_name();', смешивание змеиного футляра и верблюжьего футляра действительно трудно читать, а случай с змеем обычно предпочтительнее в Perl). – ThisSuitIsBlackNot