我有一个充满城市的数组。我想通过引用子例程来传递数组并打印每个城市以输出。但是,我有以下问题:
我可以在子例程中的while循环之前访问每个元素。但我无法访问我的while循环中的元素。我收到错误消息:
... 在第 44 行,第 997 行 (#1) 在打印中使用未初始化的值 在第 44 行,第 998 行 (#1) 在打印中使用未初始化的值 ...
以下是一些代码。我已经评论了打印的内容和不打印的内容(我试图删除我的解释不需要的代码......):
@cities;
# Assume cities is loaded successfully
&loadCities(getFileHandle('cities.txt'), $NUM_CITIES, \@cities);
&printElements(getFileHandle('names.txt'), \@cities);
sub printElements{
my $counter = 0;
my $arraySize = scalar $_[1];
# Prints fine!!!
print @{$_[1][($counter)%$arraySize];
while ((my $line = $_[0]->getline()) && $counter < 1000){
# Doesn't print. Generates the above error
print @{$_[1][($counter)%$arraySize];
$counter += 1;
}
}
- Perl 语法让我非常困惑。我不明白@{$_[1]}[0] 发生了什么。我正在努力解决它。
- $_[1],将此位置的值视为标量值(数组的内存地址)
- @{...},将此内存地址中存储的内容解释为数组
- @{...} [x],访问索引 x 处的元素
我在正确的轨道上吗?