【问题标题】:Perl list of array referencesPerl 数组引用列表
【发布时间】:2014-10-29 00:48:24
【问题描述】:

我有一个数组引用列表: my @a = ([1,2],[3,4]) 如何使用@a ((1,2)) 中的第一个数组获得一个名为“@b”的数组?我尝试了各种取消引用的组合,但它们似乎都抛出错误。

【问题讨论】:

  • 谢谢,@b = @{$a[0]};工作!但我很困惑。为什么必须使用花括号来执行此取消引用?我看过的文档说你应该能够在数组引用之前直接放一个“@”,比如@myArr=@$myArrRef。我尝试做类似 $temp=$a[0]; 的事情@b=@$temp 或 @b=@($a[0]),但它们都不起作用。为什么仅仅因为我做了一个引用数组就需要花括号?

标签: arrays perl list dereference


【解决方案1】:

@a数组中取消引用第一个元素,

my @b = @{ $a[0] };

注意@b 数组是一个副本,最终的更改不会反映在@{$a[0]}

【讨论】:

    【解决方案2】:

    @a 实际上包含上面的两个元素 - 都是对子数组的引用。它可能看起来像 4 个元素,但事实并非如此。

    所以你可以这样做:

    my ( $ref1, $ref2 ) = @a;
    

    然后取消引用$ref1:

    @b = @{ $ref1 };
    

    但我相信你会发现 - 你不需要称它为$ref1,因为它也是$a[0]。因此:

    @b = @{$a[0]};
    

    注意 - 你需要大括号 - @$a[0] 实际上是 (@$a)[0] 这不是你想要的。 (因为$a 未定义)

    【讨论】:

      猜你喜欢
      • 2016-02-25
      • 2013-08-06
      • 2011-08-26
      • 2012-06-21
      • 2014-02-09
      • 2019-04-10
      • 1970-01-01
      • 1970-01-01
      • 2010-12-31
      相关资源
      最近更新 更多