【问题标题】:Unresolvable perl error?无法解决的perl错误?
【发布时间】:2013-03-27 12:18:23
【问题描述】:
use strict;
my @array = ();
my @nums = [3, 4];
foreach my $i ( 0 .. 10 ) {
    foreach my $j ( 0 .. 10 ) {
        $nums[0] = 4+1;
        push @{ $array[$i] }, @nums;
    }
}
print $array[6][2][0]. "\n";

正如人们可以看到他们是否运行代码,这不能正常运行。但是,如果您注释掉“$nums[0] = 4+1;”这一行,它运行良好。到底是怎么回事?只能将不可变数组推到其他数组上吗?

【问题讨论】:

  • my @array = (); 最好写成my @array;,因为它们在功能上是相同的。

标签: arrays perl multidimensional-array


【解决方案1】:

@nums 是一个数组,您分配给一个数组引用(带括号[])。因此,将其更改为正确的数组声明:my @nums = (3, 4);

use strict;
use Data::Dump;

my @array = ();
my @nums = (3, 4);
foreach my $i ( 0 .. 10 ) {
    foreach my $j ( 0 .. 10 ) {
        $nums[0] = 4+1;
        push @{ $array[$i] }, @nums;
    }
}

dd @array;

#-- output:
(
  [5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4],
  [5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4],
  [5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4],
  [5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4],
  [5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4],
  [5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4],
  [5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4],
  [5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4],
  [5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4],
  [5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4],
  [5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4],
)

【讨论】:

  • 新问题:当我在外部数组中的一个数组上调用子函数时,我该怎么做?它一直告诉我我正在使用“未初始化的值”。 (这不是我在项目中使用的实际数组数组,但我做了你所说的更改。)
  • 一个新问题应该作为一个新问题提出。未附加到评论中的现有问题。
  • 我这样做了,但我想我还是把它放在这里,因为它们有些相关。
猜你喜欢
  • 2018-01-05
  • 2018-06-05
  • 2015-04-08
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-06
相关资源
最近更新 更多