gpt4 book ai didi

perl - 如何将字符串化版本的数组引用转换为 Perl 中的实际数组引用?

转载 作者:行者123 更新时间:2023-12-04 02:36:30 25 4
gpt4 key购买 nike

有什么方法可以让 Perl 将数组引用的字符串化版本(例如 (ARRAY(0x8152c28)))转换为实际的数组引用?

例如

perl -e 'use Data::Dumper; $a = [1,2,3];$b = $a; $a = $a.""; warn Dumper (Then some magic happens);'

会屈服
$VAR1 = [
1,
2,
3
];

最佳答案

是的,您可以这样做(即使没有内联 C)。一个例子:

use strict;
use warnings;

# make a stringified reference
my $array_ref = [ qw/foo bar baz/ ];
my $stringified_ref = "$array_ref";

use B; # core module providing introspection facilities
# extract the hex address
my ($addr) = $stringified_ref =~ /.*(0x\w+)/;
# fake up a B object of the correct class for this type of reference
# and convert it back to a real reference
my $real_ref = bless(\(0+hex $addr), "B::AV")->object_2svref;

print join(",", @$real_ref), "\n";

但不要那样做。如果您的实际对象被释放或重用,您很可能
最终得到段错误。

无论你真正想要达到什么目的,肯定有更好的方法。
对另一个答案的评论表明字符串化是由于使用引用作为哈希键。正如那里的回应,更好的方法是久经考验的
Tie::RefHash .

关于perl - 如何将字符串化版本的数组引用转换为 Perl 中的实际数组引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1671281/

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