gpt4 book ai didi

perl - 在 Perl 中,为什么我需要 @b = @{dclone(\@a)}?为什么我不能只是@b = dclone(\@a)?

转载 作者:行者123 更新时间:2023-12-03 15:11:44 25 4
gpt4 key购买 nike

我有各种各样的东西,包括标量和数组。我想复制它,并尝试了以下操作:

@b = dclone(\@a)

但是当我尝试从 b 读取一个标量值时,我什么也得不到。

但是,当我以这种方式复制它时,一切似乎都有效:
@b = @{dclone(\@a)}

是什么原因?

最佳答案

dclone 获取并返回引用。

#! /usr/bin/perl

use Storable qw/ dclone /;

my @array = ( [1 .. 3], qw/ apple orange banana / );
my $copy = dclone \@array;

print ref($copy), "\n";

上面程序的输出是 ARRAY ,因此要获得深度克隆的数组,请使用
my @copy = @{ dclone \@array };

为了显示没有取消引用的情况,输出
my @copy = dclone \@array;

for (0 .. 4) {
print "$_: ",
(defined $copy[$_] ? $copy[$_] : "<undef>"),
"\n";
}


0: ARRAY(0x1d396c8)
1: <undef>
2: <undef>
3: <undef>
4: <undef>

所以赋值 dclone的结果到一个数组将产生一个单元素数组,并尝试获取除第零以外的任何值会产生未定义的值。

关于perl - 在 Perl 中,为什么我需要 @b = @{dclone(\@a)}?为什么我不能只是@b = dclone(\@a)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2014245/

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