微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用数据转储程序在 perl 中存储简单的哈希

如何解决如何使用数据转储程序在 perl 中存储简单的哈希

%hash = ('abc' => 123,'def' => [4,5,6]);

如何使用 Perl 中的数据转储程序将上述哈希存储在文件

解决方法

文件只能包含字节序列,因此您需要以某种方式将数据结构转换为字节序列。这个过程称为序列化。

可供您使用的可能性是无穷无尽的,但有一些值得一提:

  • JSON 是一个非常常见的选择。
  • YAML 更加灵活。
  • Storable 专为 Perl 数据结构设计。

还有 Data::Dumper,正如你所说。

use Data::Dumper qw( );

sub serialize {
   my ($x) = @_;
   local $Data::Dumper::Purity = 1;    # Required for some data structures.
   local $Data::Dumper::Useqq = 1;     # Optional. Limits output to ASCII.
   local $Data::Dumper::Sortkeys = 1;  # Optional. Makes revision control easier.
   return Data::Dumper->Dump([$x],["x"]);
}

print($fh serialize($x));

Data::Dumper 不是一个特别好的选择,因为 Perl 中没有现有的模块可以安全地反序列化结构[1],而且 Perl 之外的支持更少。

sub deserialize {
   my ($s) = @_;
   my $x;
   eval($s);       # XXX Unsafe!
   die($@) if $@;
   return $x;
}

  1. 如果您可以将自己限制为 JSON 可以序列化的数据结构(通过将 Purity 设置为 0),那么您可以使用 Data::Undump 来安全地反序列化。但是为什么不直接使用 JSON?!
,
use Data::Dumper

open (FL,">","file.txt") or die "Cant open file $! ";
print FL Dumper \%hash;
close FL;

,

“如何使用 Perl 中的数据转储程序将上述哈希存储在文件中”

将其存储为 JSON,以便(几乎)任何东西都可以读回它,使用配置为打印 JSON 的 Data::Dumper

use strict;
use warnings;
use Data::Dumper;

local $Data::Dumper::Pair = ' : ';
local $Data::Dumper::Quotekeys = 1;
local $Data::Dumper::Useqq = 1;
local $Data::Dumper::Terse = 1;

my %hash = ('abc' => 123,'def' => [4,5,6]);

open my $file,'>','foo.json' or die $!;

print $file Dumper \%hash;

输出:

$ cat foo.json
{
  "def" : [
             4,6
           ],"abc" : 123
}

(注意:我当然更愿意为此使用专用的 JSON 处理模块,但您问了......)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。