绑定两个Perl哈希值(不是两个匿名哈希值)

时间:2015-09-11 11:53:44

标签: perl hash

为了重用一些已编写的代码库,我需要"伪装"哈希(%bar)到另一个哈希(%foo)中,以便{/ 1}}中的每个更改都可以在绑定后用%bar 查看。

使用匿名哈希构造,很简单:只需将%foo的引用复制到barfoo)的引用中。

"没有使用"一个匿名哈希(因为我必须重用的代码不是使用匿名哈希结构构建的)?这只是可能吗?

感谢。

$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";

1 个答案:

答案 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"
    }
}