【问题标题】:Perl: How to predeclare a two-dimensional array? [closed]Perl:如何预先声明一个二维数组? [关闭]
【发布时间】:2014-03-03 09:30:14
【问题描述】:

介绍后:

use strict;

我的二维数组不再起作用,我在文档中找不到如何预先声明它们的描述和示例。那么,我该怎么办?

【问题讨论】:

  • 你在use strict;之前是怎么声明的?在 Perl 中,你不能真的说,“嘿,我有一个数组,它是二维的。”你只能说,“嘿,我有一个数组,这里是:my @array = ();。然后你可以开始在其中放入数组引用,然后让它变成二维的。
  • 另外,“它不起作用”不是问题描述。您收到任何错误消息吗?有什么警告吗? (你是use warnings;,顺便说一句?)你期望什么输出?你实际上得到了什么输出? 提供详细信息。分享您的研究。
  • 在use strict 之前根本没有预先声明。所以访问$a[$i][$j] 没问题。第一次写的时候就写了,第一次读的时候就读了。现在,在第一次访问时,我当然会得到Global symbol "@zelle" requires explicit package name at ConwaysSpiel.pl line 23,我知道如何解决这个问题。该数组应该是一个全局变量,因为它拥有康威模拟人生的游乐场。
  • @ubuplex 在这种情况下,只需在顶部声明您的变量:my @zelle;。虽然这也不是出色的设计,但它应该可以解决您的直接问题。
  • 哎呀,这太容易了。我试过了,但收到语法错误消息。所以现在肯定有其他原因以某种方式被消除了。现在可以使用了。

标签: arrays perl pragma strict


【解决方案1】:

从您提供的详细信息中不可能提供很多有用的帮助。仅包含错误消息的文本会很有用。

一般来说,当您遇到不理解的错误时,最好将use diagnostics 添加到您的代码中。这将为您提供对生成的任何错误和警告的更长解释。

(但这应该被视为一种开发工具——当它投入生产时,你不应该把它留在代码中。)

【讨论】:

    【解决方案2】:

    声明它的方式与声明一维数组的方式相同:

    use strict;
    use warnings;
    
    my @AoA =  ( ['a', 'b'], ['foo', 'bar'] );
    
    print Dumper \@AoA;
    
    $VAR1 = [
              [
                'a',
                'b'
              ],
              [
                'foo',
                'bar'
              ]
            ];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-15
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多