Perl6相当于Perl的“商店”或“使用可存储”的

时间:2019-01-31 16:31:40

标签: perl6

我试图将哈希写入速度很慢的数据写入数据文件,但是与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

3 个答案:

答案 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。