是否可以通过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.pl
和script2.pl
时多次使用它。
答案 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)
答案 3 :(得分:0)
如何创建包并在其他脚本中加载它?但如果它的大小大约是4Gb,那么对于这种方法来说太过分了。下一个解决方案可能是memcached或类似的东西。 你能写一些关于哈希的其他信息吗?你是如何在其他两个脚本中使用它的?
答案 4 :(得分:0)
dbmopen / dbmclose允许您通过驱动器上的文件实现正常哈希。我从来没有尝试过从不同于创建它的脚本中读取DBM,但我认为它没有理由不起作用。