如何在Perl中处理这种情况

时间:2011-09-28 07:54:03

标签: perl

我有一个配置INI文件来存储我的脚本运行所需的所有配置。我有一个Logger.PM,它使用Log4Perl和ConfigReader.PM,它读取INI文件并将值存储在全局变量中。我的Start.PL是我从Logger和configreader调用方法的入口点。

我目前的工作

  1. 在Start.PL中,我硬编码了INI文件路径
  2. 在Logger.Pm中,我编写了应存储日志文件的目录名称
  3. 我想要什么

    1. 我希望INI文件路径可配置
    2. 我希望从INI文件中获取日志文件夹路径
    3. 我可以通过以下

      来做到这一点
      1. 将INI文件路径作为参数传递给start.pl
      2. 读取INI文件并从INI文件中获取文件夹路径
      3. 我可以面对的是

        1. 我不能在ConfigReader中使用Logger.PM(部分),因为 记录器所需的文件夹名称是INI文件的一部分
        2. 我想记录脚本的每一步(在发生故障时记录/调试目的。) 我可以使用print,但这会写入控制台并捕获我需要使用>> log.txt。然后我将被迫为我的应用程序维护2个日志,这不是我想要的

          对于这种情况,任何人都有一个很好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

您可以使用Getopt::Long在命令行中传递INI文件路径,并使用命令行开关来传递:

Start.pl --ini=/path/to/INI_file

这是一个代码示例,用于显示Start.pl中需要进行哪些更改,以便具有开关:

#!/usr/bin/env perl

use v5.12;
use strict;

use Getopt::Long;

# That little tiny 's' after 'ini=' is for string
GetOptions ( 'ini=s' => \my $ini_file );

say $ini_file;

完成此更改后,您可以读取INI文件中的所有选项,包括日志文件夹路径(您是否已使用模块管理Config::IniFiles等INI文件?)。

关于print的问题还有一些问题尚不清楚:虽然我的一位主人说用一对方括号打印是世界上最好的调试器,但为什么在你拥有时使用print设置Log::Log4perl

当你说在ConfigReader中无法使用Logger.PL时,你是指日志对象吗?