batooh: externe Daten einbinden

Beitrag lesen

Hallo.

ich habe ein Hash, das ich in mehreren Perl-Programmen verwenden will.
Wie muss ich das Hash definieren (Dateityp), und wie kann ich es in die Perl-Programme einbinden?

Die vermutlich einfachste Methode dürfte folgende sein.

Du legst dein Hash in einer einfachen Textdatei ab:

hash.txt

keyA => 'valueA',  
keyB => 'valueB',  
keyC => 'valueC',

========

In deinen Programmen kannst du das Hash dann mit der do-Funktion einbinden:

script.pl

my %hash = do 'hash.txt';

Informationen zur do-Funktion findest du hier: http://perldoc.perl.org/functions/do.html

Alternativ kannst du das Hash natürlich auch mittels require einbinden, das würde in etwa wie folgt aussehen.

Das Hash wird in einem kleinen Modul hinterlegt:

hash.pm

package hash;  
  
use strict;  
use warnings;  
  
our %hash = ( keyA => 'valueA',  
              keyB => 'valueB',  
              keyC => 'valueC',  
             );  
  
1;

=======

Anschließend wird das Hash im Programm wie folgt eingebunden und angesprochen:

script.pl

require 'hash.pm'; # oder require hash;  
print $hash::hash{'keyA'};

=========

Hierbei muss der Namensraum/Packagename gefolgt von zwei Doppelpunkten vor dem Namen des Hashs stehen (hier "hash::"). Weitere Hinweise unter http://perldoc.perl.org/functions/require.html

Die Einbindung mittels use dürfte die sauberste Variante sein, ist dafür aber auch ein klein wenig aufwendiger, vor allem, wenn du das Hash in den Namensraum deines Programms exportieren möchtest.

Das kleine Modul wird jetzt schon etwas größer:

hash.pm

package hash;  
  
use strict;  
use warnings;  
  
use Exporter;  
our @ISA = qw(Exporter);  
our @EXPORT = qw(%hash);  
  
our %hash = ( keyA => 'valueA',  
              keyB => 'valueB',  
              keyC => 'valueC',  
             );  
  
1;

=======

Der Packagename muss hierbei mit dem der Datei übereinstimmen. Das Modul Exporter dient zum Export des Hashs in den Namensraum deines Programms.

Die Einbindung kann wie folgt geschehen:

script.pl

use hash;
print $hash{'keyA'};

Informationen zu use gibt es hier: http://perldoc.perl.org/functions/use.html

Das dürften die drei (Haupt-)Möglichkeiten sein, um das Hash in deine bestehenden Programme einzubinden.

Schöne Grüße.