объявление хеш-таблицы в одном файле и использование ее в другом в Perl - PullRequest
3 голосов
/ 09 декабря 2010

Мне нужно создать хеш-таблицу в одном файле и использовать в другом.Причина этого в том, что таблица является моей «базой данных» и будет изменена, и я хочу, чтобы она размещалась со всеми другими файлами данных, а не с файлами сценариев.

Как я могу использоватьтаблица в моем скрипте?

Ответы [ 4 ]

4 голосов
/ 09 декабря 2010

Определите вашу хеш-таблицу в глобальной переменной или переменной пакета. Затем используйте команду do, чтобы загрузить определение в другой скрипт:

 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 ...
1 голос
/ 09 декабря 2010

Слишком много способов сделать это!

Простой способ - записать данные в файл как CSV и загрузить его с помощью Text :: CSV или Text :: CSV_XS.

обновление

Вы также можете использовать встроенную функцию do для чтения и выполнения файла perl из другого скрипта. I.e.:

do "config.pl";

Или используйте формат файла конфигурации, который допускает сложные структуры данных (XML, JSON, yaml, .ini и т. Д.).

0 голосов
/ 09 декабря 2010

Это, вероятно, не лучшее решение, но вы можете просто использовать Storable или Data :: Dumper , оба из которых находятся в ядре с тех пор навсегда (5.7.3 и5.5, соответственно).

В качестве альтернативы, вы можете поместить их в другой модуль и использовать / требовать, чтобы, ala

package MyImportantHash;

use Exporter;

our @EXPORT = qw( %important_hash );

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

1;

И вваш основной пакет,

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

Конечно, все это предполагает, что вы не хотите, чтобы изменения в хэше, пока в памяти автоматически отображались в файле.Если да, то не смотри дальше, чем ответ Даворга.

0 голосов
/ 09 декабря 2010

Возможно, вы ищете связанный хеш .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...