我试图将哈希写入速度很慢的数据写入数据文件,但是与Perl5相比,我不确定Perl6如何做到这一点。这是一个类似的问题Storing intermediate data in a file in Perl 6,但我不知道怎样才能用什么写在那里,特别是messagepack。
我想看到Perl6当量的
my %hash = ( 'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4);
use Storable;
store \%hash, 'hash.pldata';
,然后用读
my $hashref = retrieve('hash.pldata');
my %hash = %{ $hashref };
这是Perl5内置的,非常简单,我不需要安装任何模块(我喜欢它!),但是如何在Perl6中做到这一点?我在手册中没有看到它。他们似乎是在谈论其他事情STORE
https://docs.perl6.org/routine/STORE
答案 0 :(得分:4)
这个怎么样?是的,效率不如 getUser() {
this.userAuthenticationService.getUser().subscribe(response => {
this.originalUser = (<any>response).data.attributes;
this.originalUser.address = this.originalUser.address === null || typeof(this.originalUser.address) === 'undefined' ? {
street2: '',
street1: '',
cityId: 0,
suburbId: 0,
provinceId: 0,
postalCode: '',
type: 1
} : this.originalUser.address;
this.model = Object.assign({}, this.originalUser);
console.log('model', this.model);
this.cdc.detectChanges();
});
}
,但似乎可以正常工作。...
Storable
我明白了
#!/usr/bin/perl6
my $hash_ref = {
array => [1, 2, 3],
hash => { a => 1, b => 2 },
scalar => 1,
};
# store
my $fh = open('dummy.txt', :w)
or die "$!\n";
$fh.print( $hash_ref.perl );
close($fh)
or die "$!\n";
# retrieve
$fh = open('dummy.txt', :r)
or die "$!\n";
my $line = $fh.get;
close($fh)
or die "$!\n";
my $new_hash_ref;
{
use MONKEY-SEE-NO-EVAL;
$new_hash_ref = EVAL($line)
or die "$!\n";
}
say "OLD: $hash_ref";
say "NEW: $new_hash_ref";
exit 0;
答案 1 :(得分:2)
虽然这些方法与Storable不直接匹配,但在下面列出了几种方法:
简单对象的另一种选择是使用.perl'存储',然后使用EVAL从https://docs.perl6.org/routine/perl读取'...
> Returns a Perlish representation of the object (i.e., can usually be
> re-evaluated with EVAL to regenerate the object).
答案 2 :(得分:1)
我认真地认为您应该从Storable转移到JSON。如果您使用Rakudo Star进行安装,则它的核心安装包括许多不同的JSON模块,因此您无需添加任何其他内容。
JSON与许多不同的语言(不仅仅是Perl)兼容,并且是已定义的标准(不同于Storable,它向后不兼容)。 JSON文件的大小也差不多(如果不小的话)。
关于JSON可存储的唯一优点是处理代码引用。但是,如果您只是存储数据,我不建议您使用Storable。