在一个文件中声明一个哈希表,并在Perl中的另一个文件中使用它

时间:2010-12-09 15:30:23

标签: perl hash

我需要在一个文件中创建一个哈希表,并在另一个文件中使用。原因是该表是我的“数据库”并将被更改,我希望它与所有其他数据文件一起使用,而不是使用脚本文件。

如何在我的脚本中使用该表?

4 个答案:

答案 0 :(得分:4)

在全局变量或包变量中定义哈希表。然后使用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 :(得分:1)

有太多方法可以做到!

一个简单的方法是将数据写入文件CSV并使用Text :: CSV或Text :: CSV_XS加载。

<强>更新

您还可以使用do内置函数从另一个脚本中读取和执行perl文件。即:

do "config.pl";

或者使用允许复杂数据结构(XML,JSON,yaml,.ini等)的配置文件格式。

答案 2 :(得分:0)

也许您正在寻找tied hash

答案 3 :(得分:0)

这可能不是最佳解决方案,但您可以使用StorableData::Dumper,这两者都是永远存在于核心中(分别为5.7.3和5.5)。

或者,您可以将它们放在另一个模块中并使用/ require,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;

当然,这一切都假定您不希望在内存中更改哈希值以自动显示在文件中。如果你这样做,那就看看davorg的答案了。