2011-09-28 63 views
0

我有一个配置INI文件来存储脚本运行所需的所有配置。我有一个使用Log4Perl的Logger.PM,以及读取INI文件并将该值存储在全局变量中的ConfigReader.PM。我的Start.PL是我从Logger和configreader调用方法的入口点。如何在Perl中处理这种情况

我现在做什么

  1. 在Start.PL我硬编码的INI文件路径
  2. 在Logger.Pm我harcoded其中日志文件的目录名应存放

我想要

  1. 我想INI文件路径可配置
  2. 我想从INI文件通过以下

    1. 传递INI文件路径作为参数传递给start.pl
    2. 阅读所采取的日志文件夹路径

    我能做到这一点INI文件,并从INI文件的文件夹路径

我可能面对的是

  1. 我不能使用ConfigReader(部分)的Logger.PM因为对记录器所需的 文件夹名称为INI文件的一部分

我想记录我的剧本的每一个步骤(在案件记录/调试的目的的失败。 ) 我可以使用print但这会写入控制台并捕获我需要使用>> log.txt。然后,我将被迫保持2个日志为我的应用程序,这不是我想要的

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

+0

它是“Perl”,而不是“PERL”。 –

回答

0

可以使用Getopt::Long通过在命令行INI文件路径和命令行开关istance:

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文件中的所有选项,包括日志文件夹路径(你已经在使用一个模块来管理INI文件,如Config::IniFiles?)。

也有一些是仍不清楚在你的问题有关print:虽然我师傅一人说,印有一对括号的是世界上最好的调试器,为什么还要用print当你已经设定了Log::Log4perl

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

+0

谢谢。我目前正在使用你描述的方法。打印的使用:由于记录器只有在我的配置被初始化后才能被初始化。如果我需要使用记录功能inn Config pm,我只能使用Print语句。这就是我的意思 – KK99

+0

我明白你很担心某些可能在你的'ConfigReader'中默默无闻的事情,但是一旦配置被读取而没有错误,那么在该模块中没有其他东西会出错。在'ConfigReader'中,你可以添加停止整个程序的代码(我的意思是在出现错误时使用''或者死亡... ...''带有错误信息)。 –

+0

是的,你是对的。但是如果我使用“死”,那么我需要“打印”出现在屏幕上的消息。然后我需要在单独的文本文件中捕获STDOUT这也是一个预定的脚本。 – KK99