以下代码给出错误:全局符号“$ 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。我怀疑这是因为它是一个标量参考,但不知道如何纠正它。
答案 0 :(得分:3)
您声明了@ground
,但您在以下行中使用了$ground
:
foreach my $y(0..scalar@{$ground}){
解决方案不是声明$ground
(因为它永远不会有值),而是使用正确的变量
foreach my $y(0..scalar@ground){
但是这个循环太多了。你想要
foreach my $y(0..$#ground){