我想存储一个ini文件的数据。如何在perl中存储cube方法。
我试过了:
stylesheet.ini:
p indent noindent
h1 heading1
h2 heading2
h3 heading3
h4 heading4
h5 heading5
h6 heading6
disp-quote blockquote
脚本:
my %stylehash;
open(INI, 'stylesheet.ini') || die "can't open stylesheet.ini $!\n";
my @style = <INI>;
foreach my $sty (@style){
chomp($sty);
split /\t/, $sty;
$stylehash{$_[0]} = [$_[1], $_[2], $_[3], $_[4]];
}
print $stylehash{"h6"}->[0];
这里我分配了$ [2],$ [3],$ _ [4]不需要的数组。因为第一个P标记将获得两个数组,然后h1获得一个数组。如何完美存储以及如何检索它。
我需要:
$stylehash{$_[0]} = [$_[1], $_[2]]; #p tag
$stylehash{$_[0]} = [$_[1]]; #h1 tag
print $stylehash{"h1"}->[0];
print $stylehash{"p"}->[0];
print $stylehash{"p"}->[1];
如何存储多维数据集方法。标签始终是唯一的,样式名称随机增加或减少。我该如何解决这个问题。
答案 0 :(得分:5)
如果我理解正确,你有一堆带有值列表的键。也许一个值,也许是两个,也许是三个......你想存储它。最简单的方法是将其构建为列表的哈希,并使用预先存在的数据格式,如JSON,它可以很好地处理Perl数据结构。
use strict;
use warnings;
use autodie;
use JSON;
# How the data is laid out in Perl
my %data = (
p => ['indent', 'noindent'],
h1 => ['heading1'],
h2 => ['heading2'],
...and so on...
);
# Encode as JSON and write to a file.
open my $fh, ">", "stylesheet.ini";
print $fh encode_json(\%data);
# Read from the file and decode the JSON back into Perl.
open my $fh, "<", "stylesheet.ini";
my $json = <$fh>;
my $tags = decode_json($json);
# An example of working with the data.
for my $tag (keys %tags) {
printf "%s has %s\n", $tag, join ", ", @{$tags->{$tag}};
}
有关使用hashes of arrays的更多信息。