Philipp Hasenfratz: Includes in Perl

Beitrag lesen

Halihallo

vielen Dank für die superschnelle Antwort.

höhö ;)

Das ganze Modulgedöhns, was da noch stand brauche ich also für diese Problemstellung nicht.

Aber lern es trotzdem, wenn du Zeit hast; ist ne ganz nette Sache! ;)

Ich hatte den "require"-Befehl nämlich irgendwann schonmal ausprobiert und damals hat es nicht geklappt. Dann lag der Fehler also woanders und nicht in der Installation.

Was meinst du denn überhaupt mit Installation? - Wenn du so willst, liest require einfach eine Datei und kopiert diese in die aktuell auszuführende... Was gibt's hier zu installieren?
Approppos Verzeichnis:

Zu einer Datei gehört nunmal ein Verzeichnis... Das geht auch bei require nicht anders... Bei Modulen ist es eben so (und deshalb gibt's hier auch die meisten "Probleme"), dass der Modulname auch mit dem Verzeichnis "übereinstimmen" muss...

z. B. hast du ein Modul in Verzeichnis ./Module/Kalender.pm (.pm ist die "Kennzeichnung" von Modulen), dann _MUSS_ das Modul "Module::Kalender" heissen, sonst geht's nicht...

Ich werde das Ganze heute abend nach der arbeit mal in Ruhe durchprobieren. Prinzipiell müßte man doch Deine Funktion in eine Include-Datei packen können (da sie ja von allen Modulen gebraucht wird) und die Constanten dann in die Config-Datei. Wird wohl eine lange Nacht, bis alles läuft ;)

Lass dich nicht unterkriegen ;)

Vielleicht schon mal dein erstes Modul gefällig? :

package ConfigReader;

use strict;

sub read_config ($) {
   my ($file_name) = @_;
   my %config;
   open( CNF, '<'.$file_name ) or die 'sh*** cannot open file : '.$!;
   while (<CNF>) {
      chomp;      # keine Zeilenumbrüche
      s/#.*//;    # keine Kommentare
      s/^\s+//;   # keine anfangs-whites
      s/\s+$//;   # und keine am Ende
      next unless length;   # na, was übrig, wenn ja, dann...
      my ($name, $value) = split(/\s*=\s*/, $_, 2);
      $config{$name}=$value;
   }
   close CNF or die 'shit happens';
   return %config;
}

1;

so und dann noch ein Programm:

#!/usr/bin/perl

use strict;
use ConfigReader;

my %test = &ConfigReader::read_config('./test.cnf');

print $test{'hello'};

Viele Grüsse

Philipp