全球符号" $ ground"需要显式包名称

时间:2013-11-22 18:14:55

标签: perl

以下代码给出错误:全局符号“$ ground”需要在main.pl第19行显式包名称。

#!/usr/local/bin/perl
use strict;
use warnings;

my @ground=();

sub map_gen{
    my $width=10;
    my $height=10;

    foreach my $x(0..$width){
        foreach my $y(0..$height){
            push@{$ground[$x]},"-";
        }
    }
}

&map_gen;
foreach my $y(0..scalar@{$ground}){
    foreach my $x(0..scalar@{$ground[$y]}){
        print $ground[$x][$y];
    }
    print"\n";
}

我已经研究过这个错误,它是由于引用了一个未声明的变量,但我在错误出现之前声明了@ground。我怀疑这是因为它是一个标量参考,但不知道如何纠正它。

1 个答案:

答案 0 :(得分:3)

您声明了@ground,但您在以下行中使用了$ground

foreach my $y(0..scalar@{$ground}){

解决方案不是声明$ground(因为它永远不会有值),而是使用正确的变量

foreach my $y(0..scalar@ground){

但是这个循环太多了。你想要

foreach my $y(0..$#ground){