【问题标题】:How to get Perl Data::Dumper to follow references that are hash keys如何让 Perl Data::Dumper 遵循作为哈希键的引用
【发布时间】:2014-07-30 00:59:18
【问题描述】:

Data::Dumper 似乎没有扩展作为哈希键的引用,我无法弄清楚要更改哪些设置才能这样做。这甚至可能吗?

示例代码:

#!/usr/bin/perl
use Data::Dumper;
@array = ('foo', 'bar');
$arf = \@array;
%hash1 = ( 'baz' => $arf );
%hash2 = ( $arf => 'baz' );
print Dumper(@array); print "\n";
print Dumper(%hash1); print "\n";
print Dumper(%hash2);

这个输出:

$VAR1 = 'foo';
$VAR2 = 'bar';

$VAR1 = 'baz';
$VAR2 = [
          'foo',
          'bar'
        ];

$VAR1 = 'ARRAY(0x8be1b04)';
$VAR2 = 'baz';

但我想要一些东西来获得输出:

$VAR1 = 'foo';
$VAR2 = 'bar';

$VAR1 = 'baz';
$VAR2 = [
          'foo',
          'bar'
        ];

$VAR1 = [
          'foo',
          'bar'
        ];
$VAR2 = 'baz';

【问题讨论】:

  • 那是因为您不能将引用作为哈希键。它们将始终被字符串化。 Data::Dumper 给你正确的结果。
  • 啊,我明白了。有没有办法将字符串化的哈希键转换回引用?
  • 没有任何实际意义。是的,字符串ARRAY(0x8be1b04) 显然与原始引用指向的位置有某种关系。然而,此时字符串应该被认为是一个字符串,任何逆向工程都将是困难和/或脆弱的。
  • 您无法从字符串中取回引用,因为它甚至可能不再存在。您只知道字符串化时引用的位置。
  • @SteffenUllrich,实际上如果你知道被引用的东西仍然存在(没有被垃圾收集),it is possible to reclaim the reference back from the string。然而,任何觉得需要将这种技术应用到他们的代码中的人都可能在某个地方出了问题。

标签: perl data-dumper


【解决方案1】:

简单地说,改变

%hash2 = ( $arf => 'baz' );

@hash2 = ( $arf => 'baz' );

当然,那它就不再是哈希,而是数组了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 2013-06-07
    • 2014-11-21
    • 2016-01-28
    • 2015-09-30
    • 2017-01-06
    • 2015-06-30
    相关资源
    最近更新 更多