J'ai les fichiers PL et PM suivants
Start.PL, ConfigReader.PM, BL.PM, Logger.PM
Extrait de code de 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");
}
Où Logger.PM est un module personnalisé que j'ai écrit en utilisant Log4Perl.
Extrait de code de BL.PM
Package BL
use strict;
use Logger;
use ConfigReader;
my %chash = %{$ConfigReader::configIni->param( -block => "UserDetails")};
Extrait de code de Start.PL
Start.PL est le point d'entrée de mon application qui lance Logger, ConfigReader
use strict;
use ConfigReader;
use Logger;
use BL;
&Logger::InitiateLogger();
&ConfigReader::OpenConfigIni("My_Config.ini");
my %qhash = %{$ConfigReader::configIni->param( -block => "ABC")};
Le problème est
Quand j'exécute Start.PL, le code échoue avec l'erreur suivante
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.
(Ignorer les numéros de ligne)
Il pointe vers ce qui suit dans BL.pm
my %chash = %{$ConfigReader::configIni->param( -block => "UserDetails")};
Si je commente use Bl
dans start.Pl, le script fonctionne bien ce qui veut dire que
my %qhash = %{$ConfigReader::configIni->param( -block => "ABC")};
fonctionne bien dans Start.PL
Ce que j'essaie de faire ici, c'est que
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
Quel pourrait être le problème ici ?