У меня есть следующие файлы PL и PM
Start.PL, ConfigReader.PM, BL.PM, Logger.PM
Извлечение кода из ConfigReader.PM
Package ConfigReader
use Config::Simple;
use Logger;
our $configIni;
sub OpenConfigIni()
{
my ($cfg_ini_path)=@_;
&Logger::LogMsg("**** OpenConfigIni starts ****","info");
&Logger::LogMsg($cfg_ini_path,"info");
$configIni = new Config::Simple($cfg_ini_path);
&Logger::LogMsg("**** OpenConfigIni ends ****","info");
}
Где Logger.PM - это пользовательский модуль, который я написал с использованием Log4Perl.
Извлечение кода из BL.PM
Package BL
use strict;
use Logger;
use ConfigReader;
my %chash = %{$ConfigReader::configIni->param( -block => "UserDetails")};
Извлечение кода из Start.PL
Start.PL - это точка входа в мое приложение, которое запускает Logger, ConfigReader
use strict;
use ConfigReader;
use Logger;
use BL;
&Logger::InitiateLogger();
&ConfigReader::OpenConfigIni("My_Config.ini");
my %qhash = %{$ConfigReader::configIni->param( -block => "ABC")};
Проблема
Когда я запускаю Start.PL, код завершается с ошибкой
Can't call method "param" on an undefined value at BL.pm line 9
Compilation failed in require at Start.pl line 19.
BEGIN failed--compilation aborted at Start.pl line 19.
(Игнорировать номера строк)
Указывает на следующее в BL.pm
my %chash = %{$ConfigReader::configIni->param( -block => "UserDetails")};
Если я прокомментирую use Bl
в start.Pl, скрипт работает нормально, что означает
my %qhash = %{$ConfigReader::configIni->param( -block => "ABC")};
отлично работает в Start.PL
что я пытаюсь достичь, это то, что
1. Use the ConfigReader.PM for handling the configuration related
2. Make use of the our $configIni in all modules
3. Initialing the Logger and ConfigReader form start.pl whioch is the entry point here
В чем здесь проблема?