gpt4 book ai didi

perl - 为什么没有正确评估 Dumper 输出?

转载 作者:行者123 更新时间:2023-12-04 02:32:38 24 4
gpt4 key购买 nike

我尝试eval Dumper 的输出以获得非常简单的哈希引用,其中两个键具有相同的值(引用另一个哈希):

#!/usr/bin/env perl

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

my $foo = { data => 1 };
my $boo = {
x => $foo,
y => $foo,
};

my $VAR1;
my $bar = eval( Dumper( $boo ) );

print Dumper( $boo );
print Dumper( $bar );

我希望 $boo$bar 具有相同的结构,但 eval 似乎无法解决 inner-ref $VAR1->{'x'} 正确,我希望最后两行打印相同的字符串:

$VAR1 = {
'x' => {
'data' => 1
},
'y' => $VAR1->{'x'}
};

但第二个未定义 xy(取决于以字面形式引用的是哪个):

$VAR1 = {
'x' => {
'data' => 1
},
'y' => undef
};

我试过了 simple usage部分在 doc 上,它给出了具有更复杂结构的良好结果(还没有严格),但我无法用我的数据通过 2 个对相同哈希的引用来完成它。

我在这里错过了什么?

最佳答案

要正确捕获结构内的引用,您需要设置 Purity 标志(有关详细信息,请参阅 Data::Dumper 文档)。

$Data::Dumper::Purity = 1;

但这还不够,因为 Dumper($boo) 现在将返回

$VAR1 = {
'y' => {
'data' => 1
},
'x' => {}
};
$VAR1->{'x'} = $VAR1->{'y'};

因此,您不能只eval 这个字符串,您还需要从中返回$VAR1

为防止纯度标志干扰代码的其他部分,您可以在本地设置它:

#!/usr/bin/perl
use strict;
use warnings;

use Data::Dumper;

my $foo = { data => 1 };
my $boo = {
x => $foo,
y => $foo,
};

my $VAR1;
my $bar = do {
local $Data::Dumper::Purity = 1;
eval Dumper( $boo );
$VAR1
};

print Dumper( $boo );
print Dumper( $bar );

关于perl - 为什么没有正确评估 Dumper 输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63285678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com