【问题标题】:How to dereference this array? And how do I store this array into a hash?如何取消引用这个数组?以及如何将此数组存储到哈希中?
【发布时间】:2021-10-07 18:58:55
【问题描述】:

我在绕过 Perl 的引用和解除引用时遇到了一些麻烦,我来自 C++ 背景,所以我理解解除引用和引用。只是 Perl 的语法让我头晕目眩。

我有这段代码,我试图在其中打印$obj->{numbers} 的内容

my @arr = (1,2,3,4,5,6);

my $test = "" . join(',', @arr). "" || '';

my @my_arr = ();

@my_arr = split (',', $test);

my $obj->{numbers} = \@my_arr;

print $obj->{numbers};

这将打印 ARRAY(0x1ac9af8).

我希望它能打印出类似的东西 1 2 3 4 5 6.

我也想像这样将该数组存储在哈希中

my $this;
$this->{foo} = [ { bar => $obj->{numbers} } ];
print $this->{foo}[0];

这将打印HASH(0x418b018)。我也希望这个打印1 2 3 4 5 6

我怎样才能在散列中打印这个数组?

【问题讨论】:

  • 要序列化 ​​Perl 数据结构,请查看Data::Dumper

标签: arrays perl reference hashmap dereference


【解决方案1】:

$obj->{numbers} 返回对数组的引用,这就是为什么您在打印时会看到类似 ARRAY(0x1ac9af8) 的内容。

您可以使用@{ } 取消对数组的引用。例如:

print "@{ $obj->{numbers} }";

打印:

1 2 3 4 5 6

我使用了double quotes,这样您就可以在数组的每个元素之间获得一个空格。

对于散列中的数组也是如此:

print "@{ $this->{foo}[0]{bar} }";

另见perldsc

【讨论】:

    猜你喜欢
    • 2018-03-12
    • 2015-11-26
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 2016-09-23
    • 1970-01-01
    相关资源
    最近更新 更多