【发布时间】:2014-03-25 08:51:04
【问题描述】:
我有一个包含城市的数组。我想通过引用子例程来传递数组并打印每个城市以输出。但是,我有以下问题:
-
我可以在子例程中的 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 处的元素
我走对了吗?
【问题讨论】:
标签: arrays perl scalar-context