都市が設定された配列があります。サブルーチンへの参照によって配列を渡し、各都市を出力して出力したいと考えています。ただし、次の問題があります。
サブルーチンの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 の要素にアクセス
私は正しい軌道に乗っていますか?