Patrick Andrieu: Warnungen bei Config::IniFiles und noch 'ne Frage

Beitrag lesen

Hallo Perlhacker!

1. Config::IniFiles

Ich experimentiere ein bisschen mit genanntem Modul und beobachte dabei folgendes:
   Inhalt File »ini.ini«:
   [age]
   of_captain = 42
   #eof

Testcase 1 (Config::IniFiles direkt im Perl-Skript):

  
   #!/usr/bin/perl -w  
  
   use strict;  
   use CGI qw(header);  
   use Config::IniFiles;  
  
   my $ini = '/pfad/zu/meiner/datei/ini.ini';  
   my $cfg = new Config::IniFiles(-file => $ini);  
   my $age = $cfg->val('age','of_captain');  
  
   print header();  
   print $age;  

Ausgabe: 42, Error-Log bleibt leer.

Testcase 2 (Config::IniFiles wird in einem weiteren Modul eingebunden):

  
   #!/usr/bin/perl -w  
  
   use strict;  
   use CGI qw(header);  
   use Test::Modul;  
  
   my $age = new Test::Modul;  
   print header();  
   print $age->age;  

Test/Modul:pm

  
   package Test::Modul;  
  
   use strict;  
   use Config::IniFiles;  
  
   my $ini = '/pfad/zu/meiner/datei/ini.ini';  
   my $cfg = new Config::IniFiles(-file => $ini);  
  
   my $age = $cfg->val('age','of_captain');  
  
   ## object constructor  
   sub new {  
     my $pkg = shift;  
     my $modul = bless {  }, $pkg;  
     return $modul;  
   }  
  
   sub age {  
     return $age;  
   }  
   1;  

Ausgabe: 42, Error-Log enthält: [Wed Feb 18 11:33:25 2009] Symbol.pm: Name "Config::IniFiles::/pfad/zu/meiner/datei/ini.ini" used only once: possible typo at C:/Perl/lib/Symbol.pm line 135.

Fragen: Warum? Wie kann ich die Warnung vermeiden?

2. Vergessen wir jetzt Config::IniFiles und die Warnung und ändern Testcase 2 wie folgt:

  
   my $age = new Test::Modul;  
   my $test = "age";  
   print header();  
   print $age->$test;  

Ausgabe: 42

Ich war überrascht, dass es geht. Das wäre für ein Skript, an das ich arbeite, praktisch.
   Aber: Übersehe ich dabei irgendeine Falle, in die ich mit solchen Methodenaufrufen
   tappen könnte? Das funzt™ nämlich auch mit Methoden, die Parameter erwarten:

  
   my $other = new Anderes::Modul;  
   my $test = "name_der_methode_die_einen_parameter_will";  
   print header();  
   print $other->$test('parameter');  

Viele Grüße aus Frankfurt/Main,
Patrick

--
_ - jenseits vom delirium - _

   Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
J'ai 10 ans! | Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?