【问题标题】:Save Perl hash permanently even script exit即使脚本退出也永久保存 Perl 哈希
【发布时间】:2013-01-28 13:07:22
【问题描述】:

我想创建一个哈希表,即使脚本退出,它也可以永久保存键和值。这可能吗?

例如:

我第一次运行这个脚本,它接受 $key 和 $value 变量并将其存储到哈希表中。

$key = 'perl';
$value = '123';
$hash{$key} = $value; 

第二次运行相同的脚本,但我改变了值

$key = 'ruby';
$value = '456';
$hash{$key} = $value; 

如果我打印出哈希表,我将得到值为 123 的 perl 和值为 456 的 ruby​​。

【问题讨论】:

    标签: perl file hash


    【解决方案1】:

    我没有很多使用经验,但是你可以使用Storable

    use strict;
    use warnings;
    use Storable;
    store \%hash, 'file';
    

    或者,您可以使用数据库或键值存储(MySQL、PostgreSQL、MongoDB、Couchbase、Riak 等)。

    【讨论】:

    • 谢谢...这很好,但无论如何我可以在不使用任何模块的情况下绕过吗?
    • 是的。复制并粘贴源代码,并编译 XS 文件。或者自己滚动。或者写一个守护进程。但是为什么你想让这个数量级比它需要的更复杂呢?
    • Storable 是现代 Perl 的核心模块;您不必担心它是否已安装。另一个选项是Data::Dumper(另一个核心模块),它产生清晰的输出,可以重新读取以重构原始数据。
    • 我想我会坚持将其写入文件并从那里开始进行一些处理:)。谢谢!
    • 好吧,我会尝试使用 Storable 看看它是如何工作的!谢谢大家
    【解决方案2】:

    虽然我同意 Storable 有效,但您也可以使用 Data::Dumper,它可以提供人类可读/可修改的输出。您还可以将数据读回到 Perl 数据结构中。

    输出

    print $FH Data::Dumper->new([$hash_data], ['output123'])->Purity(1)->Dump;
    

    输入

    my $data_structure = do { local $/; <$FH> };
    eval $data_structure;
    

    一个 $data_structure 被评估你将有一个 hashref @ $output123。 $output 由您最初进行转储时设置的参数命名。

    【讨论】:

    • 我刚刚看到@Jonathan Leffler 提出了同样的建议。
    【解决方案3】:

    将其写入文件。

    (到达 30char min post len 的额外字符)

    【讨论】:

    • 嗨,如果我不想将它写入文件,我只想将它保存在一个变量中,比如环境变量。
    • 程序,根据定义,不会持久化。而且您通常无法更改调用进程的环境。 Jack Maney 对 Storable 的建议很好,并且会为您抽象出大部分内容,但是如果您想将数据存储在某个地方,则必须有意将其存储在某个地方。
    猜你喜欢
    • 2012-10-07
    • 2015-10-25
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多