Ich habe folgende PL- und PM-Dateien
Start.PL, ConfigReader.PM, BL.PM, Logger.PM
Code-Auszug aus 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 ist ein benutzerdefiniertes Modul, das ich mit Log4Perl geschrieben habe.
Code-Auszug aus BL.PM
Package BL
use strict;
use Logger;
use ConfigReader;
my %chash = %{$ConfigReader::configIni->param( -block => "UserDetails")};
Codeauszug aus Start.PL
Start.PL ist der Einstiegspunkt zu meiner Anwendung, die Logger, ConfigReader
use strict;
use ConfigReader;
use Logger;
use BL;
&Logger::InitiateLogger();
&ConfigReader::OpenConfigIni("My_Config.ini");
my %qhash = %{$ConfigReader::configIni->param( -block => "ABC")};
Das Problem ist
Wenn ich Start.PL ausführe, schlägt der Code mit folgender Fehlermeldung fehl
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.
(Zeilennummern ignorieren)
Sie zeigt in BL.pm auf Folgendes
my %chash = %{$ConfigReader::configIni->param( -block => "UserDetails")};
Wenn ich kommentiere use Bl
in start.Pl funktioniert das Skript einwandfrei, was bedeutet
my %qhash = %{$ConfigReader::configIni->param( -block => "ABC")};
funktioniert problemlos in Start.PL
Was ich hier zu erreichen versuche, ist, dass
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
Was könnte hier das Problem sein?