3 votes

déclarer une table de hachage dans un fichier et l'utiliser dans un autre en Perl

Je dois créer une table de hachage dans un fichier et l'utiliser dans un autre. La raison en est que cette table est ma "base de données" et sera modifiée, et je veux qu'elle s'installe avec tous les autres fichiers de données, et non avec les fichiers script.

Comment puis-je utiliser le tableau dans mon script ?

4voto

mob Points 61524

Définissez votre table de hachage dans une variable globale ou de paquetage. Utilisez ensuite l'option do pour charger la définition dans un autre script :

 datafiles/database.def
 ---------------------------
 package ProjectData;
 our %DATA = ('abc' => 'def', 'ghi' => 'jkl', ...);

 scripts/myscript.pl
 ------------------------
 use strict;
 do 'datafiles/database.def';
 ... do something with %ProjectData::DATA ...

1voto

salva Points 5357

Il y a trop de façons de le faire !

Une méthode simple consiste à écrire vos données dans un fichier en tant que CSV et le charger en utilisant Text::CSV ou Text::CSV_XS.

mise à jour :

Vous pouvez également utiliser le do builtin pour lire et exécuter un fichier perl à partir d'un autre script. A savoir :

do "config.pl";

Ou bien utilisez un format de fichier de configuration qui permet des structures de données complexes (XML, JSON, yaml, .ini, etc.).

0voto

Dave Cross Points 17363

Vous cherchez peut-être un hachage lié .

0voto

Hugmeir Points 1239

Ce n'est probablement pas la meilleure solution, mais vous pourriez simplement utiliser Stable o Data::Dumper qui sont toutes deux présentes dans le noyau depuis toujours (5.7.3 et 5.5, respectivement).

Vous pouvez également les placer dans un autre module et l'utiliser/le requérir, comme dans le cas suivant

package MyImportantHash;

use Exporter;

our @EXPORT = qw( %important_hash );

our %important_hash = (
              some_key  => 'some_value',
         );

1;

Et dans votre paquet principal,

use MyImportantHash;
say "$_ => $important_hash{$_}" for sort keys %important_hash;

Bien sûr, tout ceci suppose que vous ne voulez pas que les modifications apportées au hachage en mémoire apparaissent automatiquement dans le fichier. Si c'est le cas, ne cherchez pas plus loin que la réponse de davorg.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X