是否可以将字符串化引用从SCALAR转换回REF?

时间:2014-03-03 11:11:57

标签: perl reference scalar stringification

我想编写一个子程序(比如说s2r),它可以将SCALAR输入(一个有效的字符串化引用)转换为REF类型。作为奖励,如果输入是相应的字符串化版本,我希望子例程将输入转换为原始祝福对象(或绑定引用)。我的计划是将此子例程用作调试实用程序(例如,查看哪些引用可能被意外存储为哈希键)。

我的初始原型(失败)是这样的:

#!/usr/bin/env perl

use strict;
use warnings;

use Scalar::Util qw(reftype);

sub bad_s2r {
    my $thing = shift or return undef;
    return eval {
        no strict 'refs';
        $thing =~ /^HASH\b/ ? \%$thing : $thing =~ /^ARRAY\b/ ? \@$thing : \$$thing
    };
}

my $ref = [];
my $str = "$ref";

print $ref, "\n";
print bad_s2r($str), "\n";

我得到了这个输出:

ARRAY(0x7fde1a0070d0)
ARRAY(0x7fde1a007310)

我非常怀疑我正在引用原始数组的副本。

有没有办法将标量视为参考,可能使用Perl编译器后端B或其他模块,或者可能遍历程序中存在的所有可能的引用,并将输入与其字符串化值进行比较?我不介意它是否效率低,只要它是可能的。

如果不能做这样的事情,有什么理由不这样吗?

0 个答案:

没有答案