簡體   English   中英

如何使用數據轉儲器將簡單的 hash 存儲在 perl 中

[英]How can I store simple hash in perl using data dumper

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

如何使用 Perl 中的數據轉儲器將 hash 以上存儲在文件中

文件只能包含字節序列,因此您需要以某種方式將數據結構轉換為字節序列。 這個過程稱為序列化。

您可以使用的可能性是無窮無盡的,但有一些值得一提:

  • 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 中的數據轉儲器將 hash 存儲在文件中”

將其存儲為 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;

Output:

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

(注意:我當然寧願為此使用專用的 JSON 處理模塊,但你問了......)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM