为了重用一些已编写的代码库,我需要"伪装"哈希(%bar
)到另一个哈希(%foo
)中,以便{/ 1}}中的每个更改都可以在绑定后用%bar
查看。
使用匿名哈希构造,很简单:只需将%foo
的引用复制到bar
(foo
)的引用中。
"没有使用"一个匿名哈希(因为我必须重用的代码不是使用匿名哈希结构构建的)?这只是可能吗?
感谢。
$foo = $bar;
当然,匿名哈希构造本来就是一种祝福。
use strict;
use Data::Dumper;
my %foo = ();
my %bar = ();
%foo = %bar; # This won't work as it copies %bar into %foo as at the current time.
$bar{A}->{st} = 'a';
$bar{A}->{qt} = 'a';
$bar{B}->{st} = 'b';
$bar{B}->{qt} = 'b';
# $foo{A}->{st} doesn't exist
产生预期结果:
use strict;
use Data::Dumper;
my $foo = {};
my $bar = {};
$foo = $bar; # This works fine.
$bar->{A}->{st} = 'a';
$bar->{A}->{qt} = 'a';
$bar->{B}->{st} = 'b';
$bar->{B}->{qt} = 'b';
print STDOUT "foo\n---\n";
print Dumper($foo) . "\n\n";
print STDOUT "bar\n---\n";
print Dumper($bar) . "\n\n";
答案 0 :(得分:5)
对于您的示例,您可以使用Data::Alias将%bar
别名改为%foo
。这样您就可以在%bar
中进行更改,然后在%foo
中查看这些内容。
use strict;
use warnings;
use Data::Printer;
use Data::Alias;
my %foo = ();
my %bar = ();
alias %foo = %bar;
$bar{A}->{st} = 'a';
$bar{A}->{qt} = 'a';
$bar{B}->{st} = 'b';
$bar{B}->{qt} = 'b';
p %foo;
p %bar;
<强>输出:强>
{
A {
qt "a",
st "a"
},
B {
qt "b",
st "b"
}
}
{
A {
qt "a",
st "a"
},
B {
qt "b",
st "b"
}
}