【发布时间】:2016-05-12 14:42:26
【问题描述】:
我想在 Log::Log4perl 配置文件中使用我脚本中的 Perl 变量。我阅读了文档,发现我可以使用子程序,但如果可能的话,我想做得更简单一些。
我想为我的 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,因为返回值非常简单。
以字符串
sub {...开头的每个值都被解释为在应用程序解析配置时要执行的 Perl 代码...
所以我尝试了类似的方法,但没有成功:
log4perl.appender.av_std_LOGFILE.filename=\
sub { print "$av_std_LOGFILE"; }
有没有办法在我的脚本中没有 sub 的情况下获取变量的结果?
【问题讨论】:
-
您说
$av_std_LOGFILE在脚本中设置了几次,在模块中设置了几次。是哪个? -
另外,你不应该用
&调用子程序,除非你知道它是做什么的。return &av_getLogfileName();应该是return av_getLogfileName();(或者更好的是,return av_get_logfile_name();,混合蛇形和骆驼形的大小写真的很难阅读,而蛇形大小写在 Perl 中通常是首选)。