跨Perl脚本共享哈希

时间:2013-11-19 20:05:03

标签: perl hash sharing

是否可以通过Linux机器上的另一个Perl脚本共享由Perl脚本创建的哈希?

./hash_script.pl # Creates a hash after parsing a file
                 # Takes several minutes and hash consumes 4Gb of memory

./script1.pl # Reads hash

./script2.pl # Reads hash

我想创建一次哈希并在运行script1.plscript2.pl时多次使用它。

5 个答案:

答案 0 :(得分:2)

如果您的hash_script脚本将其哈希转储到某个文件中(使用Data :: Dumper或其他方法),您可以在do的后续脚本中加载该哈希。

在script1 / script2中:

our %sharedhash; #whatever name the hash has in the dumped file
do 'hash_dump_file.txt' or die "Couldn't read hash: $@";

print $sharedhash{stuff};

答案 1 :(得分:2)

我建议使用Perl模块Storable。 Storable可以采用任何数据结构并将其存储到磁盘上。

use Storable;  # It automatically imports all functions. Grrr...

...

store \%hash, $file_name;

但是,如果这是一个4Gb文件,它可能太大而无法有效地用于Perl哈希。这就是为什么其他帖子建议您使用SQL或NoSQL database的原因。哈希必须将整个文件保留在内存中并尝试操作它。 SQL或NoSQL数据库可以提取所需的文件。

但是,请尝试Storable,看看需要多长时间。

答案 2 :(得分:1)

你没有说为什么你需要在内存中使用这么大的哈希,但是使用一些NoSQL数据库会更合适。

查看RedisMongoDB

答案 3 :(得分:0)

如何创建包并在其他脚本中加载它?但如果它的大小大约是4Gb,那么对于这种方法来说太过分了。下一个解决方案可能是memcached或类似的东西。 你能写一些关于哈希的其他信息吗?你是如何在其他两个脚本中使用它的?

答案 4 :(得分:0)

dbmopen / dbmclose允许您通过驱动器上的文件实现正常哈希。我从来没有尝试过从不同于创建它的脚本中读取DBM,但我认为它没有理由不起作用。