在Perl中,如何打包哈希并将其解压缩回原始状态?

qod*_*nja 2 perl hash json pack

我想在数据库中将哈希保存为打包字符串,我得到包装部分确定,但是我遇到了问题

测试哈希

my $hash = {

   test_string   => 'apples,bananas,oranges',
   test_subhash  => { like => 'apples' },
   test_subarray => [ red, yellow, orange ]

}
Run Code Online (Sandbox Code Playgroud)

我想也许我可以在这个例子中使用JSON:XS 将哈希转换为json字符串,然后打包JSON字符串......

关于这种方法的想法?

ike*_*ami 5

Storable能够非常精确地存储Perl结构.如果你需要记住某些东西是一个弱的参考,等等,你想要可存储.否则,我会避免它.

JSON(Cpanel :: JSON :: XS)和YAML是不错的选择.

  • 如果使用一个版本的Storable存储某些内容并尝试使用早期版本检索它,则可能会出现问题.这意味着访问数据库的所有计算机必须具有相同版本的Storable.
  • Cpanel :: JSON :: XS比Storable快.
  • 快速YAML模块可能比Storable快.
  • JSON无法存储对象,但YAML和Storable可以.
  • JSON和YAML是人类可读的(对某些人而言).
  • JSON和YAML易于解析并以其他语言生成.

用法:

my $for_the_db = encode_json($hash);
my $hash = decode_json($from_the_db);
Run Code Online (Sandbox Code Playgroud)

我不知道"包装"是什么意思.由Cpanel生成的字符串:: JSON :: XS encode_json可以按原样存储到BLOB字段中,而生成的字符串Cpanel::JSON::XS->new->encode可以按原样存储到TEXT字段中.